繁体   English   中英

如何使 pyplot 图表中的 y 轴显示相同值的两个测量值(计数和百分比)?

[英]How to make y-axis in pyplot chart display two measurements of same value (counts AND percents)?

我想建立一个条形图来显示一些资源的利用率。 假设文本中的字符:

from collections import Counter
import matplotlib.pyplot as plt

raw_data = 'data to make example bar chart'
counts = Counter(raw_data)
keys, values = zip(*counts.most_common())
plt.bar(keys, values);

这将生成以下图表,其中包含绝对字符数: 结果条形图

如果我在绘图之前转换值,例如

values = [v/len(raw_data) * 100.0 for v in values]

我会得到完全相同的图表,但 a 的值为 20.0 (%)。

问题是,我能以某种方式在 y 轴上显示两个值吗?

我看到了有关如何显示两个相同值的不同函数并具有左右刻度的食谱,但这里我有一个 function,只是测量单位不同。 我可以在不绘制两个条形图的情况下以某种方式显示两个比例吗?

https://matplotlib.org/gallery/api/two_scales.html

您可以通过ax.twinx()创建一个右 y 轴,给它与左 y 轴完全相同的限制,并将刻度格式化为百分比。 PercentFormatter()获取一个参数,告诉哪个值对应于 100%。 在这种情况下,100% 将是raw_data中的所有数据。

from collections import Counter
import matplotlib.pyplot as plt
from matplotlib.ticker import PercentFormatter
import numpy as np

raw_data = np.random.choice([*'abcdefghijklmnopqrst'], 200)
counts = Counter(raw_data)
keys, values = zip(*counts.most_common())
fig, ax = plt.subplots()
ax.bar(keys, values, color='turquoise')
ax.margins(x=0.02) # less wasted space left and right
ax.grid(axis='y')

ax2 = ax.twinx()
ax2.set_ylim(*ax.get_ylim())
ax2.yaxis.set_major_formatter(PercentFormatter(len(raw_data)))
plt.show()

示例图

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM