我有一个从熊猫数据框创建的分组条形图。我想在每组条形图上设置一条斧头线,但要使其停止在条形图组的边缘之外,因此我需要找到一种方法来获取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个组,所以我不想在整个图上都画线将不可读。
预先感谢
答案 0 :(得分:1)
条形图从其中心位置伸出width
的+/-一半。因此,位于1
位置且宽度为0.6
的钢筋组从1-0.6/2 = 0.7
到1+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()