gpt4 book ai didi

python - 根据 x 值的数量增加 matplotlib 中图形的宽度

转载 作者:太空狗 更新时间:2023-10-30 02:49:41 26 4
gpt4 key购买 nike

我试图使用 matplotlib 绘制一个 barchart。要绘制的项目数量可能会有所不同。我不能用常量(如 6.,8. 或 8.,12. 等)设置 figure.set_size_inches(w,h)set_figwidth(w),因为我无法提前知道 w 或 h 的值应该是多少。我希望图形的宽度随着要绘制的项目数量的增加而增加。有人能告诉我该怎么做吗?

import pylab

def create_barchart(map):
xvaluenames = map.keys()
xvaluenames.sort()
yvalues = map.values()
max_yvalue = get_max_yvalue(yvalues)
xdata = range(len(xvaluenames))
ydata = [map[x] for x in xvaluenames]
splitxdata = [x.split('-',1) for x in xvaluenames]
xlabels = [x[0] for x in splitxdata]
figure = pylab.figure()
ax = figure.add_subplot(1,1,1)
figsize = figure.get_size_inches()
print 'figure size1=',figsize,'width=',figsize[0],'height=',figsize[1]
barwidth = .25
ystep = max_yvalue/5
pylab.grid(True)
if xdata and ydata:
ax.bar(xdata, ydata, width=barwidth,align='center',color='orange')
ax.set_xlabel('xvalues',color='green')
ax.set_ylabel('yvalues',color='green')
ax.set_xticks(xdata)
ax.set_xlim([min(xdata) - 0.5, max(xdata) + 0.5])
ax.set_xticklabels(xlabels)
ax.set_yticks(range(0,max_yvalue+ystep,ystep))
ax.set_ylim(0,max(ydata)+ystep)
figure.autofmt_xdate(rotation=30)
figure.savefig('mybarplot',format="png")
print 'figure size2=',figure.get_size_inches()
pylab.show()

def get_max_yvalue(yvals):
return max(yvals) if yvals else 0

如果我尝试一小部分项目,我会得到

if __name__=='__main__':
datamap = dict(mark=39,jim=40, simon=20,dan=33)
print datamap
create_barchart(datamap)

plot of small set

但如果我使用更大的集合

datamap = dict(mark=39,jim=40, simon=20,dan=33) 
additional_values= dict(jon=34,ray=23,bert=45,kevin=35,ned=31,bran=11,tywin=56,tyrion=30,jaime=36,griffin=25,viserys=25)
datamap.update(additional_values)
create_barchart(datamap)

plot of a larger set

这看起来很糟糕,我想知道是否有办法增加图形的宽度,根据要绘制的项目数,在两种情况下保持条形宽度相同

最佳答案

可以在初始化图的时候设置宽度:

# default scale is 1 in your original case, scales with other cases:
widthscale = len(yvalues)/4
figsize = (8*widthscale,6) # fig size in inches (width,height)
figure = pylab.figure(figsize = figsize) # set the figsize

figure = pylab.figure() 行替换为以上三行,您将获得所需的内容。

关于python - 根据 x 值的数量增加 matplotlib 中图形的宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7108852/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com