我一直在尝试用Python和Matplot进行数据可视化。在这种情况下,我试图想象每列丢失的数据量。我运行了一个简短的脚本来查找每列的所有缺失值以及数组missing_count中的结果。我现在想用Matplot在条形图中显示这个,但我遇到了这个问题:
import matplotlib.pyplot as plt
import numpy as np
missing_count = np.array([33597, 0, 0, 0, 0, 0, 0, 12349, 0, 0, 12349, 0, 0, 0, 115946, 47696, 44069, 81604, 5416, 5416, 5416, 5416, 0, 73641, 74331, 187204, 128829, 184118, 116441, 183093, 153048, 187349, 89918, 89918, 89918, 89918, 89918, 89918, 51096, 51096, 51096, 51096, 51096, 51096, 51096, 51096, 51096, 51096])
n = len(missing_count)
index = np.arange(n)
fig, ax = plt.subplots()
r1 = ax.bar(index, n, 0.15, missing_count, color='r')
ax.set_ylabel('NULL values')
ax.set_title('Amount of NULL values per colum')
ax.set_xticks(index + width / 2)
ax.set_xticklabels(list(originalData.columns.values))
plt.show()
导致此错误:
ValueError Traceback (most recent call last)
<ipython-input-34-285ca1e9de68> in <module>()
10 fig, ax = plt.subplots()
11
---> 12 r1 = ax.bar(index, n, 0.15, missing_count, color='r')
13
14 ax.set_ylabel('NULL values')
C:\Users\Martien\Anaconda3\lib\site-packages\matplotlib\__init__.py in inner(ax, *args, **kwargs)
1895 warnings.warn(msg % (label_namer, func.__name__),
1896 RuntimeWarning, stacklevel=2)
-> 1897 return func(ax, *args, **kwargs)
1898 pre_doc = inner.__doc__
1899 if pre_doc is None:
C:\Users\Martien\Anaconda3\lib\site-packages\matplotlib\axes\_axes.py in bar(self, left, height, width, bottom, **kwargs)
2077 if len(height) != nbars:
2078 raise ValueError("incompatible sizes: argument 'height' "
-> 2079 "must be length %d or scalar" % nbars)
2080 if len(width) != nbars:
2081 raise ValueError("incompatible sizes: argument 'width' "
ValueError: incompatible sizes: argument 'height' must be length 48 or scalar
我查看了Matplot文档,该文档告诉我高度应该是标量,但它没有引用或解释这个标量是什么。还有this示例我跟随它,当我运行它时它会起作用。
我已经没想到为什么我会收到这个错误,所有的帮助都会非常感激。
编辑:originalData是我读过的原始CSV文件,我只在这里使用它来命名我的栏
答案 0 :(得分:2)
所以,根据https://matplotlib.org/devdocs/api/_as_gen/matplotlib.pyplot.bar.html
第二个参数必须是高度
您输入n
作为第二个参数,即单个数字
试
r1 = ax.bar(index, missing_count, 0.15, color='r')
相反,应该完成工作。
更好的是,明确你的论点名称(单调乏味,更难保持干净,但是当你有多个论点时这是一个很好的想法)
r1 = ax.bar(x=index, height = missing_count, width = 0.15, color='r')
第二个参数必须是高度; height对应于任何特定框的计数。假设你有一个零和一组
A = [0,0,0,0,1,1,1]
这将导致条形图有两个条形,一个将是4个单位高(因为你有四个零),另一个将是3个单位高
命令
r1 = ax.bar([0,1], [4,3], 0.15, color='r')
会产生一个条形图,其中条形图为零,条形条形为1.第一个条形图高4个单位,第二个条形高3个单位。
转换为您的代码,missing_count
对应于数组的COUNT
这不是A
,而是[Counter([0,0,0,0,1,1,1])[x] for x in Counter([0,0,0,0,1,1,1])]
答案 1 :(得分:1)
代码n
是标量。您可能不希望条形高度保持不变,而是missing_count
的值。
ax.bar(index, missing_count, 0.15, color='r')