当前位置: 首页 > 知识库问答 >
问题:

matplotlib中条形图的平均线

咸高谊
2023-03-14

在使用matplotlib时,如何为直方图绘制平均线(水平)?

现在,我可以毫无问题地绘制直方图。下面是我使用的代码:

## necessary variables
ind = np.arange(N)                # the x locations for the groups
width = 0.2                      # the width of the bars
plt.tick_params(axis='both', which='major', labelsize=30)
plt.tick_params(axis='both', which='minor', labelsize=30)
ax2 = ax.twinx()
## the bars

rects1 = ax.bar(ind, PAAE1, width,
            color='0.2',
            error_kw=dict(elinewidth=2,ecolor='red'),
            label='PAAE1')

rects2 = ax.bar(ind+width, PAAE2, width,
                color='0.3',
                error_kw=dict(elinewidth=2,ecolor='black'),
                label='PAAE2')

rects3 = ax2.bar(ind+width+width, AAE1, width,
            color='0.4',
            error_kw=dict(elinewidth=2,ecolor='red'),
            label='AAE1')

rects4 = ax2.bar(ind+3*width, AAE2, width,
                color='0.5',
                error_kw=dict(elinewidth=2,ecolor='black'),
                       label='AAE3')



maxi = max(dataset[2])
maxi1 = max(dataset[4])
f_max = max(maxi, maxi1)
lns = [rects1,rects2,rects3,rects4]
labs = [l.get_label() for l in lns]


ax.legend(lns, labs, loc='upper center', ncol=4)

# axes and labels
ax.set_xlim(-width,len(ind)+width)
ax.set_ylim(0, 100)
ax.set_ylabel('PAAE', fontsize=25)
ax2.set_ylim(0, f_max+500)
ax2.set_ylabel('AAE (mW)', fontsize=25)
xTickMarks = dataset[0]
ax.set_xticks(ind+width)
xtickNames = ax.set_xticklabels(xTickMarks)
plt.setp(xtickNames, rotation=90, fontsize=25)

我想绘制PAAE 1,2和AAE 1,2的平均线。我应该用什么来绘制平均线?

共有1个答案

范京
2023-03-14

如果您想要一条垂直线来表示平均值,请使用axvline(x_值)。这将放置一条始终跨越整个(或指定部分)y轴的垂直线。还有用于水平线的axhline

在其他作品中,您可能会遇到如下情况:

ax.axvline(data1.mean(), color='blue', linewidth=2)
ax.axvline(data2.mean(), color='green', linewidth=2)

作为一个更完整但不必要的复杂例子(大部分是用弯曲的箭头很好地注释了手段):

import numpy as np
import matplotlib.pyplot as plt

data1 = np.random.normal(0, 1, 1000)
data2 = np.random.normal(-2, 1.5, 1000)

fig, ax = plt.subplots()

bins = np.linspace(-10, 5, 50)
ax.hist(data1, bins=bins, color='blue', label='Dataset 1',
        alpha=0.5, histtype='stepfilled')
ax.hist(data2, bins=bins, color='green', label='Dataset 2',
        alpha=0.5, histtype='stepfilled')

ax.axvline(data1.mean(), color='blue', linewidth=2)
ax.axvline(data2.mean(), color='green', linewidth=2)

# Add arrows annotating the means:
for dat, xoff in zip([data1, data2], [15, -15]):
    x0 = dat.mean()
    align = 'left' if xoff > 0 else 'right'
    ax.annotate('Mean: {:0.2f}'.format(x0), xy=(x0, 1), xytext=(xoff, 15),
            xycoords=('data', 'axes fraction'), textcoords='offset points',
            horizontalalignment=align, verticalalignment='center',
            arrowprops=dict(arrowstyle='-|>', fc='black', shrinkA=0, shrinkB=0,
                            connectionstyle='angle,angleA=0,angleB=90,rad=10'),
            )

ax.legend(loc='upper left')
ax.margins(0.05)
plt.show()
 类似资料:
  • 问题内容: 我正在尝试使用创建水平堆叠的条形图,但是我看不到如何使条形实际堆叠,而不是全部从y轴开始。 这是我的测试代码。 看到tcaswell的评论后,编辑使用kwarg。 这似乎是正确的方法,但是如果没有特定条形的数据,则尝试失败,因为它正尝试添加到随后返回的值。 问题答案: 由于您使用的是熊猫,因此值得一提的是,您可以在本地进行堆积条形图: 请参阅 文档的可视化部分。

  • 我需要注释水平条形图。我能够使用matplotlib网站上显示的示例来注释垂直条形图,但是对于 horizonatl 的类似想法似乎不起作用。 以下是垂直方向的小型工作示例: 以下是我想要使用的代码,但不适用于水平图形 感谢任何帮助,提前感谢!

  • 我正在尝试使用matplotlib创建条形图。 x轴数据是带有年份的列表:[19501960、19701、980、19901、995-2015] y轴数据是一个数量与年数相等的列表。 这是我的代码: 结果是:条与条之间有太多的空间 正如你所看到的,1950-1960年之间的差距是巨大的。我怎么能做到这一点,这样1950-1995年酒吧之间就没有间隙。我知道它的间隔为10年,但看起来并不好。 任何帮

  • 我正在使用python中的matplotlib绘制直方图,并希望绘制一条代表数据集平均值的线,以虚线的形式覆盖在直方图上(或者其他颜色也可以)。关于如何在柱状图上画一条线有什么想法吗? 我正在使用plot()命令,但不确定如何绘制垂直线(即,我应该为y轴指定什么值? 谢谢

  • 我正在尝试使用2.3.0绘制chart.js水平条形图- 但它只显示一个小节。我错过了什么?

  • 如贴图所示,我正在尝试使用MPAndroid libraray的水平条形图,一切都很好,除了在图的末尾有一条十字线,如图所示。我还附上了图表样式的代码。请有人帮忙纠正我代码中的错误。 MpChart错误的图像: