gpt4 book ai didi

python - 如何反转 matplotlib pyplot 条形图中的条形大小?

转载 作者:行者123 更新时间:2023-12-04 04:20:16 25 4
gpt4 key购买 nike

我正在尝试设置一个倒轴条形图,使较小的数字具有较大的条形,并且这些条形从条形图的顶部开始。理想情况下,我的 y 轴将从底部的 10e-10 到顶部的 10e-2 变化,并且看起来类似于这个 excel 图: enter image description here

在呈现这些数据时,数字越小越好,所以我希望用更大的条形图来表示,而不是没有条形图。

反转 y 轴限制使条形图从顶部开始,但这并没有解决我的问题,因为较小的条形图仍然与较小的数字相关联。有什么方法可以移动原点,并指定应该从原点到轴上适当的刻度绘制条形图吗?

数据和代码在这里真的不是那么重要,这里摘录一段:

plt.rcParams['xtick.bottom'] = plt.rcParams['xtick.labelbottom'] = False
plt.rcParams['xtick.top'] = plt.rcParams['xtick.labeltop'] = True
barVals = [ 10**(-x) for x in range(10) ]
ticks = [x for x in range(10)]
plt.bar(ticks, barVals)
plt.yscale('log')
plt.ylim([1e-2, 1e-10])
#plt.axes().spines['bottom'].set_position(('data', 0))
plt.show()

enter image description here

结果图有较大的条形表示较大的数字,较小的条形表示较小的数字。我可以绘制每个值和最大值之间的差值,但我希望在 matplotlib/pyplot 中有一些内置的方法可以做到这一点。

使用 matlab,我正在寻找的功能是设置轴基值:

b = bar(ticks, barValues);
b(1).BaseValue = 1e0;

最佳答案

考虑到轴的正常对数缩放的工作方式,我认为最好的办法是手动缩放数据,并调整标签以匹配。以下是一个让您入门的简单示例,使用 OO API :

data = 10.0**np.arange(-2, -7, -1)
plot_data = np.log10(data)

fig, ax = plt.subplots()
ax.bar(np.arange(data.size) + 1, plot_data)

您可以手动设置刻度,但我建议使用 Formatter :

from matplotlib.ticker import StrMethodFormatter
...
ax.yaxis.set_major_formatter(StrMethodFormatter('$10^{{{x}}}$'))

This particular Formatter接受适用于 str.format 的模板字符串并使用绑定(bind)到名称 x 的刻度值对其进行插值。如果只想显示指数的整数部分,可以将其初始化为

 StrMethodFormatter('$10^{{{x:.0f}}}$')

符号 $...$ 告诉 matplotlib 该字符串是 LaTeX,而 {{...}} 是转义花括号,告诉 LaTeX 将字符串分组整个指数作为上标。

调整图表的限制:

ax.set_ylim([plot_data.min() - 0.5, -1])

关于python - 如何反转 matplotlib pyplot 条形图中的条形大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59569908/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com