Matplot数据可视化 - 高度参数必须是标量

时间:2017-11-10 13:22:31

标签: python matplotlib

我一直在尝试用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文件,我只在这里使用它来命名我的栏

2 个答案:

答案 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')