【问题标题】:Plot a horizontal line reference in combination with boxplot结合箱线图绘制水平线参考
【发布时间】:2020-03-24 02:09:28
【问题描述】:

我想在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, fontsize=15)
plt.hlines(reference,xmin=min(reference),xmax=max(reference),'r')

想要的结果:

【问题讨论】:

  • reference 是一个数组吗?我认为该行应该类似于plt.hlines(reference, xmin=min(your x axes), xmax=max(your x axes))

标签: pandas matplotlib boxplot


【解决方案1】:

由于您似乎想要绘制一条跨越轴的整个宽度的线,因此使用plt.axhline() 会更简单,它是为了这种精确用途而设计的。

那么你的代码就是:

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

【讨论】:

    【解决方案2】:

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

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

    plt.gcf().autofmt_xdate() 可以通过自动选择 x-labels 的旋转来帮助更好地适应图像。

    这是一个例子:

    import numpy as np
    import matplotlib.pyplot as plt
    import pandas as pd
    
    N = 50
    df = pd.DataFrame({"Prior": np.random.geometric(0.5, N) * 2 + 10,
                       "DSI": np.random.geometric(0.1, N) * 3 + 20,
                       "DSI.ESMDA": np.random.geometric(0.2, N) + 40,
                       "DSI.ESMDA.LOC": np.random.geometric(0.2, N) * 4 + 30,
                       "ES-MDA": np.random.geometric(0.7, N) * 2.5 + 60})
    df.boxplot(grid=False, rot=18, fontsize=15)
    reference = [20, 50, 75]
    left, right = plt.xlim()
    plt.hlines(reference, xmin=left, xmax=right, color='r', linestyles='--')
    plt.subplots_adjust(bottom=0.20)
    plt.show()
    

    补充说明:

    • plt.subplots_adjust(bottom=0.20) 提供更多空间,因此刻度标签不会被图像底部截断。大约 20° 的旋转使情节更加紧凑。
    • linestyle=':'(虚线而不是虚线)可能更适合此图表。
    • 正如@Diziet Asahi 所说,plt.axhline 是绘制水平线的替代方法。注意axhline 只接受一个数字,而不是一个列表,作为第一个参数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-06-30
      • 1970-01-01
      • 2019-01-31
      • 2015-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多