gpt4 book ai didi

python - 如何在 Python 中将直方图的 y 轴值乘以固定数字

转载 作者:行者123 更新时间:2023-12-01 08:18:55 25 4
gpt4 key购买 nike

我有一个要使用直方图绘制的数据列表。我想分别缩放每个图的 y 轴。如果我确实喜欢以下内容,它会将每个图的 y 轴 缩放 10。

protocols = {}
types = {"data1": "data1.csv", "data2": "data2.csv", "data3": "data3.csv"}

for protname, values in protocols.items():
fig, ax1 = plt.subplots()
ax1.hist(values["col_data"], facecolor='blue', alpha=0.9, label=protname,align='left')
y_vals = ax1.get_yticks()
ax1.set_yticklabels(['{:3.0f}'.format(x * 10) for x in y_vals])
plt.legend()
plt.show()

enter image description here enter image description here enter image description here

但是,我希望每个直方图的缩放是分开的。我尝试了以下方法,但它似乎没有按预期工作。

for protname, values in protocols.items():
fig, ax1 = plt.subplots()
ax1.hist(values["col_data"], facecolor='blue', alpha=0.9, label=protname,align='left')
y_vals = ax1.get_yticks()
ax1.set_yticklabels(['{:3.0f}'.format(x * 10) for x in y_vals if protname=="data1" and ['{:3.0f}'.format(x * 10) for x in y_vals if protname=="data2" and ['{:3.0f}'.format(x * 15) for x in y_vals if protname=="data3"]]])

plt.legend()
plt.show()

enter image description here enter image description here enter image description here

如果我们只尝试一个图 ax1.set_yticklabels(['{:3.0f}'.format(x * 10) for x in y_vals if protname=="data2"])它仅将更改应用于第二个图,并将其他图留空。

最佳答案

首先,我对为什么要操作 y 轴值感兴趣,因为直方图值是您数据的值 - 我不认为有理由在不丢失数据含义的情况下更改它。

也就是说,我的下一个问题通常是,如果您有意在 for 循环内设置 plt.subplots ,因为该命令的一个用例实际上是创建将几个子图合并到一个图中 - 也许您稍后会考虑这一点......

但是,在不同迭代中应用不同因素的最简单方法就是使用 zip 将它们作为另一个列表添加到循环中:

factors = [10, 10, 15]
for (protname, values), m in zip(protocols.items(), factors):
...
ax1.set_yticklabels(['{:3.0f}'.format(x * m) for x in y_vals])
...

关于python - 如何在 Python 中将直方图的 y 轴值乘以固定数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54806322/

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