python - 如何在水平条形图中添加百分比?
问题描述
我有以下代码,它创建一个水平条形图:
data = pandas.read_csv('C:/py/matplotlib/02-BarCharts/data.csv')
responders_id = data['Responder_id']
langs_worked_with = data['LanguagesWorkedWith']
languages = Counter()
for reponse in langs_worked_with:
languages.update(reponse.split(";"))
langs = []
langs_users_num = []
for language in languages.most_common(15):
langs.append(language[0])
langs_users_num.append(language[1])
langs.reverse()
langs_users_num.reverse()
plt.barh(langs, langs_users_num)
plt.tight_layout()
plt.show()
运行上面的代码后,我得到了这个:
代表此图表的数据是从 stackoverflow 解析的,stackoverflow 中的相同图表如下所示。如何修改上面的代码以添加百分比,如下所示。
请帮我解决一下这个。谢谢
解决方案
这是一种方法。我选择了一些样本数据。这个想法是
- 通过添加语言名称和百分比来创建新的 y-tick 标签
- 在 y 轴上分配这些修改后的标签
- 隐藏图形的框架和 x 轴以及 y 轴刻度
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
total = 90000
langs = ['C', 'C++', 'Java', 'Python']
langs_users_num = np.array([32000, 40000, 50000, 60000])
percent = langs_users_num/total*100
new_labels = [i+' {:.2f}%'.format(j) for i, j in zip(langs, percent)]
plt.barh(langs, langs_users_num, color='lightskyblue', edgecolor='blue')
plt.yticks(range(len(langs)), new_labels)
plt.tight_layout()
for spine in ax.spines.values():
spine.set_visible(False)
ax.axes.get_xaxis().set_visible(False)
ax.tick_params(axis="y", left=False)
plt.show()
推荐阅读
- javascript - 使用 Chrome 扩展清单 V3,如何执行代码字符串?
- python - 我不明白为什么 skimage 不会使用 skimage.io.imread 导入图像(使用 mrcnn 模型
- python - 在 Tensorflow 中查找图像分类的混淆矩阵
- python - Plotly Dash:单击按钮下载本地文件
- python - 如何按给定数字查找和打印属性的内容?
- design-patterns - 微服务的职责范围?
- c++ - 用于反转特征矩阵的函数,无需用于自动微分的分支语句
- node.js - redis:如何检查客户端是否已连接
- c# - NetCore 6 - 将空文字或可能的空值转换为不可为空的类型
- python - 使烧瓶查询更高效