python - Python:使用 Matplotlib 将 CSV 转换为条形图
问题描述
我想从具有以下格式的 CSV 文件中绘制条形图:
#Number of Occurrences, Occurrences of A, Occurrences of B, Occurrences of C
30,1,3,26
...
我对 Matplotlib 完全陌生,我正在尝试了解如何去做。我希望 y 轴具有#Number of Occurences值(提供的示例为 30)和三个条;具有各自值的条 A、B 和 C。
我怎么能做到?
我的代码:
#!/usr/bin python
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import sys
def main():
table = pd.read_csv(sys.argv[1])
final = table.tail(1)
names_list = list(final)
values = [ final.values[0][1], final.values[0][2], final.values[0][3] ]
position = np.arange(len(names_list))
plt.title(sys.argv[1].split('.')[0])
plt.bar(position,values,align='center')
plt.yticks(position,names_list)
plt.show()
if __name__ == '__main__':
main()
但我明白了
**ValueError: shape mismatch: objects cannot be broadcast to a single shape**
解决方案
错误是因为 'values' 上有 3 个值,而 position 上有 4 个值。所以,形状不匹配。x和y轴还有其他东西。检查此代码,让我知道它是否符合您的预期:
def main():
table = pd.DataFrame([[30, 1, 3, 26]], columns=['Number Oc', 'Oc A', 'Oc B', 'Oc C'])
final = table.tail(1)
names_list = list(final)
values = [ final.values[0][1], final.values[0][2], final.values[0][3] ]
position = np.arange(len(names_list)-1)
plt.title(sys.argv[1].split('.')[0])
plt.bar(position,values,align='center')
plt.xticks(position, names_list[1:4])
plt.show()
推荐阅读
- list - 如何将dict列表与相同的键合并?
- javascript - 如何将动态组件添加到 Angular 路由器
- python-3.x - 如何解决错误“TypeError:strptime() 参数 1 必须是 str,而不是 bool”
- javascript - 计数器将值增加 100 倍 vuejs
- python - Python3 - 从坐标列表中获取最中心的矩形
- kubernetes - 如何防止 Kubernetes 水平自动扩缩器缩容?
- visual-studio - 部署失败 - 查看第三方网站的 Nuget 包
- android - 如何捕获或处理配额超出 Firebase 异常以避免应用程序崩溃?
- python - 在 Python Pans 中将时间分组为时间段
- excel - 运行时错误“380”无法设置 Value 属性。无效的属性值