如何获得在熊猫中创建的条形图上的X点的位置?

时间:2019-06-26 10:24:38

标签: python python-3.x pandas matplotlib

我有一个从熊猫数据框创建的分组条形图。我想在每组条形图上设置一条斧头线,但要使其停止在条形图组的边缘之外,因此我需要找到一种方法来获取xtick位置列表以及绘制的条形图宽度,这样我就可以将xmin和xmax args放入axhline中。如果无法执行此操作,是否可以在绘图功能中设置刻度位置并使用这些值?

我尝试过的唯一一件事是手动设置线条位置,但是我绘制的图来自具有不同列数的数据框,因此图表上的组数不一定总是相同的。

使用get_xticks并没有多大帮助,因为它只是给了我一个[1,2,3]数组,对于axhline来说没有用。

数据框的设置如下(数据框将始终具有3行,但列数可变):

import matplotlib.pyplot as plt
import pandas as pd

fig, ax = plt.subplots()

df = pd.DataFrame(data=[[1,2,3], [4,5,6], [7,8,9]], index=['type1', 'type2', 'type3'], columns=['group1', 'group2', 'group3'])

df.plot(kind='bar', ax=ax)

每个组都有一个阈值,我想在图形上用水平线表示,但在某些情况下,我有10或11个组,所以我不想在整个图上都画线将不可读。

预先感谢

1 个答案:

答案 0 :(得分:1)

条形图从其中心位置伸出width的+/-一半。因此,位于1位置且宽度为0.6的钢筋组从1-0.6/2 = 0.71+0.6/2=1.3延伸。

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

fig, ax = plt.subplots()

df = pd.DataFrame(data=[[1,2,3], [4,5,6], [7,8,9]], 
                  index=['type1', 'type2', 'type3'], 
                  columns=['group1', 'group2', 'group3'])

width = 0.6
ax = df.plot(kind='bar', ax=ax, width=width)


mean= df.mean(axis=1)

x = np.arange(len(df.columns))
ax.hlines(mean, x - width/2, x + width/2)

plt.show()

enter image description here