Pandas 结合箱线图绘制水平线参考

Pandas 结合箱线图绘制水平线参考,pandas,matplotlib,boxplot,Pandas,Matplotlib,Boxplot,我想在箱线图中添加一条水平线,即“参考”。我尝试了下面的代码,但没有按预期工作 df=pd.DataFrame({"Prior": initial_FOPR, "DSI": pca_FOPR, "DSI.ESMDA": ksvd_FOPR, "DSI.ESMDA.LOC": dct_FOPR,"ES-MDA": Basic_FOPR,}) df.boxplot(grid=False, rot=45,

我想在
箱线图
中添加一条水平线,即“参考”。我尝试了下面的代码,但没有按预期工作

df=pd.DataFrame({"Prior": initial_FOPR,
                "DSI": pca_FOPR,
                "DSI.ESMDA": ksvd_FOPR,
                "DSI.ESMDA.LOC": dct_FOPR,"ES-MDA": Basic_FOPR,})
df.boxplot(grid=False, rot=45, fontsize=15)
plt.hlines(reference,xmin=min(reference),xmax=max(reference),'r')
预期结果:
xmin
xmax
是指x轴的最左侧和最右侧。由于x轴只是标签列表,
matplotlib
在内部使用数字0、1、2
plt.xlim()
是获取这些限制的简单方法。要使用虚线,请使用“---”作为线型

hlines
的第一个参数,在本例中称为
reference
,是绘制水平线的y位置。如果
reference
是一个数组,则可以一次绘制多条水平线

plt.gcf()

以下是一个例子:

将numpy导入为np
将matplotlib.pyplot作为plt导入
作为pd进口熊猫
N=50
df=pd.DataFrame({“Prior”:np.random.geometric(0.5,N)*2+10,
“DSI”:np.随机几何(0.1,N)*3+20,
“DSI.ESMDA”:np.随机几何(0.2,N)+40,
“DSI.ESMDA.LOC”:np.随机几何(0.2,N)*4+30,
“ES-MDA”:np.随机几何(0.7,N)*2.5+60})
盒形图(网格=假,rot=18,fontsize=15)
参考=[20,50,75]
左,右=plt.xlim()
plt.hline(参考,xmin=left,xmax=right,color='r',linestyles='--'))
plt.子批次调整(底部=0.20)
plt.show()

补充说明:

  • plt.subplot\u adjust(bottom=0.20)
    提供了更多的空间,因此勾号标签不会被图像底部切断。旋转约20°会使绘图更加紧凑
  • 一个
    linestyle=':'
    (虚线而不是虚线)可能更适合这个图形
  • 正如@Diziet Asahi所说,
    plt.axhline
    是画水平线的另一种选择。请注意,
    axhline
    只接受一个数字而不是列表作为第一个参数

xmin
xmax
是x轴的最左侧和最右侧。由于x轴只是标签列表,
matplotlib
在内部使用数字0、1、2
plt.xlim()
是获取这些限制的简单方法。要使用虚线,请使用“---”作为线型

hlines
的第一个参数,在本例中称为
reference
,是绘制水平线的y位置。如果
reference
是一个数组,则可以一次绘制多条水平线

plt.gcf()

以下是一个例子:

将numpy导入为np
将matplotlib.pyplot作为plt导入
作为pd进口熊猫
N=50
df=pd.DataFrame({“Prior”:np.random.geometric(0.5,N)*2+10,
“DSI”:np.随机几何(0.1,N)*3+20,
“DSI.ESMDA”:np.随机几何(0.2,N)+40,
“DSI.ESMDA.LOC”:np.随机几何(0.2,N)*4+30,
“ES-MDA”:np.随机几何(0.7,N)*2.5+60})
盒形图(网格=假,rot=18,fontsize=15)
参考=[20,50,75]
左,右=plt.xlim()
plt.hline(参考,xmin=left,xmax=right,color='r',linestyles='--'))
plt.子批次调整(底部=0.20)
plt.show()

补充说明:

  • plt.subplot\u adjust(bottom=0.20)
    提供了更多的空间,因此勾号标签不会被图像底部切断。旋转约20°会使绘图更加紧凑
  • 一个
    linestyle=':'
    (虚线而不是虚线)可能更适合这个图形
  • 正如@Diziet Asahi所说,
    plt.axhline
    是画水平线的另一种选择。请注意,
    axhline
    只接受一个数字而不是列表作为第一个参数

因为您似乎想画一条横跨轴的整个宽度的线,所以使用起来会更简单,这是为了精确使用

那么您的代码就是:

df.boxplot(grid=False, rot=45, fontsize=15)
plt.axhline(reference, c='r')

因为您似乎想要画一条横跨轴的整个宽度的线,所以使用起来会更简单,这是为了精确使用

那么您的代码就是:

df.boxplot(grid=False, rot=45, fontsize=15)
plt.axhline(reference, c='r')

reference
是数组吗?我认为这条线应该类似于
plt.hlines(reference,xmin=min(你的x轴),xmax=max(你的x轴))
reference
是数组吗?我认为该行应该类似于
plt.hlines(参考,xmin=min(您的x轴),xmax=max(您的x轴))