A.A*_*age 4 python matplotlib python-3.x
我只想显示一半的误差线,因为它们是对称的;由于我不知道如何用“干净的方式”做到这一点,我选择使用底部为 0 的不对称误差;但是,当我展示大写字母时,我意识到这不是最好的方法。
这是代码:
import numpy as np
import matplotlib.pyplot as plt
N = 5
men_means = (20, 35, 30, 35, 27)
men_std = (2, 3, 4, 1, 2)
ind = np.arange(N)
width = 0.35
fig, ax = plt.subplots()
rects1 = ax.bar(ind, men_means, width, color='r',yerr=[np.zeros(len(men_std)),men_std],capsize = 5)
women_means = (25, 32, 34, 20, 25)
women_std = (3, 5, 2, 3, 3)
rects2 = ax.bar(ind + width, women_means, width, color='y',yerr=[np.zeros(len(women_std)),women_std],capsize = 5)
plt.show()
Run Code Online (Sandbox Code Playgroud)
这是我得到的情节:
. 如您所见,我绘制半误差条的方式可能不是应该做的。
那么有没有办法隐藏底部上限线或绘制半误差线的更好方法?
ax.errorbar可以选择设置uplims=True或lolims=True表示均值分别代表上限或下限。不幸的是,您似乎无法直接将这些选项与 一起使用ax.bar,因此我们必须分别绘制误差条和条形图。
中uplims/lolims选项的文档ax.errorbar:
lolims/uplims/xlolims/xuplims:BOOL,可选,默认:无这些参数可用于指示值仅给出上限/下限。在这种情况下,使用插入符号来表示这一点。lims-arguments 可能与
xerrand属于同一类型yerr。要对倒轴使用限制,set_xlim()或者set_ylim()必须在 errorbar() 之前调用。
请注意,使用此选项会将大写字母更改为箭头。如果您需要平顶而不是箭头,请参阅下面的示例,了解如何将它们改回大写。
您可以在 matplotlib 网站上的此示例中查看这些选项的实际效果。
现在,这是您的示例,已修改:
import numpy as np
import matplotlib.pyplot as plt
N = 5
men_means = (20, 35, 30, 35, 27)
men_std = (2, 3, 4, 1, 2)
ind = np.arange(N)
width = 0.35
fig, ax = plt.subplots()
rects1 = ax.bar(ind, men_means, width, color='r')
err1 = ax.errorbar(ind, men_means, yerr=men_std, lolims=True, capsize = 0, ls='None', color='k')
women_means = (25, 32, 34, 20, 25)
women_std = (3, 5, 2, 3, 3)
rects2 = ax.bar(ind + width, women_means, width, color='y')
err2 = ax.errorbar(ind + width, women_means, yerr=women_std, lolims=True, capsize = 0, ls='None', color='k')
plt.show()
Run Code Online (Sandbox Code Playgroud)
如果您不喜欢这些箭头,您可以通过更改caplines从ax.errorbar. 我们可以将它们从箭头更改为标记样式_,然后使用以下命令控制它们的大小.set_markersize:
import numpy as np
import matplotlib.pyplot as plt
N = 5
men_means = (20, 35, 30, 35, 27)
men_std = (2, 3, 4, 1, 2)
ind = np.arange(N)
width = 0.35
fig, ax = plt.subplots()
rects1 = ax.bar(ind, men_means, width, color='r')
plotline1, caplines1, barlinecols1 = ax.errorbar(
ind, men_means, yerr=men_std, lolims=True,
capsize = 0, ls='None', color='k')
caplines1[0].set_marker('_')
caplines1[0].set_markersize(20)
women_means = (25, 32, 34, 20, 25)
women_std = (3, 5, 2, 3, 3)
rects2 = ax.bar(ind + width, women_means, width, color='y')
plotline2, caplines2, barlinecols2 = ax.errorbar(
ind + width, women_means, yerr=women_std,
lolims=True, capsize = 0, ls='None', color='k')
caplines2[0].set_marker('_')
caplines2[0].set_markersize(10)
plt.show()
Run Code Online (Sandbox Code Playgroud)