2

通过这个例子, http: //matplotlib.org/examples/pylab_examples/barchart_demo.html

我想生成动态条形图。到目前为止,我有以下脚本。

import sys
import matplotlib.pyplot as plt
import numpy as np

groups = int(sys.argv[1])

subgroup = int(sys.argv[2])

fig, ax = plt.subplots()

index = np.arange(groups)

print index

bar_width = 1.0 / (subgroup + 1)

print bar_width

mainlist = []


for x in range(0, groups):
    #print x
    templist = []
    for num in range(0, subgroup):
        templist.append(num+1)
    #print templist
    mainlist.append(templist)

print mainlist

for cnt in range(0,subgroup):
    plt.bar(index + (bar_width * cnt), mainlist[cnt], bar_width)

plt.savefig('odd_bar_chart.png')

当我为组和子组传递相同的值时,这很好用,

> odd_bar_chart.py 3 3
> odd_bar_chart.py 2 2

但是如果我像这样传递不同的值,

奇数条形图.py 3 2 奇数条形图.py 2 3

它给出以下错误 AssertionError:不兼容的大小:参数“高度”必须是长度 {第一个参数}或标量

现在我不知道图片中的身高是多少?谁能告诉我这里有什么问题?

4

1 回答 1

2

查看. _ plt.bar这里的前两个参数是指栏左侧的值和它的高度leftheight

您的错误消息通知您第二个参数height的长度应与第一个参数的长度相同或为标量(单个值)。

错误:在最后的迭代中,您mainlist[cnt]根据左侧位置绘制高度index + (bar_width * cnt)。显然,您正在尝试使用 调整x位置以在空间上分隔条形图,bar_with*cnt因此这是一个标量。then 的长度left由 给出index,由 生成index = np.arange(groups),因此将具有长度group。但是高度的长度由 给出subgroup,这是在templist(具有长度subgroup)附加到时完成的mainlist

所以你的错误来自你生成数据的方式。通常最好是手工粘贴一些东西(就像他们在您引用的示例中所做的那样),或者使用某种形式numpy.random 来生成一组随机数。

于 2013-09-18T08:17:42.127 回答