用Python创建条形图

时间:2011-10-24 04:35:32

标签: python charts matplotlib bar-chart

我在条形图中遇到了一些问题,我正试图在python中创建。我的图表代码如下所示:

import matplotlib
matplotlib.use('Agg')
from pylab import *
import calendar

def webshow(img):
    savefig(img,dpi=500)
    print 'Content-Type: text/html\n'
    print '<img width="800" height="400" src="'+img+'" />'

genres = []
n = 0
for c in sorted_list: 
    genres.append(sorted_list[n][0])
    n += 1

grosses = []
a = 0
for c in sorted_list:
    grosses.append(sorted_list[a][1])
    a += 1

clf()
bar(arange(len(grosses)),grosses)
xticks( arange(len(genres)),genres, rotation=80)
webshow("barchart.png")

我的图表如下:

a busy cat http://28.media.tumblr.com/tumblr_ltk9v6xShD1r5te58o1_500.png

基本上我的主要问题是这些值是用科学记数法的小数。如果可能的话,我想以百万美元呈现它们。此外,我不知道如何制作它,所以类型不会在底部被切断。谢谢你的帮助!

1 个答案:

答案 0 :(得分:4)

首先,我会使用figure对象进行处理:这样可以更轻松地根据自己的喜好构建绘图。要构建图形,应执行以下操作:

fig = plt.figure()
fig.subplots_adjust(bottom=0.2)          # Remark 1
ax = fig.add_subplot(111)
ax.bar(arange(len(grosses)), grosses)
ax.ticklabel_format(style='plain')       # Remark 2
ax.set_xticks(arange(len(genres)))
ax.set_xticklabels(genres, rotation=80)
savefig('barchart.png', dpi=500)

以下评论:

  1. 这会调整图像的大小,在这种情况下,它会放大底部以适合您的标签。在大多数情况下,您大致知道要放入的数据,这样就足够了。如果您使用的是matplotlib 1.1或更高版本,则可以使用tight_layout功能自动执行此操作。另一种方法是根据here所示的所有轴标签的边界框自行计算所需的尺寸,但是您需要一个渲染器才能确定所有标签的尺寸。
  2. 通过指定标签格式(使用sciplain),您可以更改值的呈现。使用plain时,它只会按原样呈现值。有关详细信息,请参阅此功能的docs。请注意,您还可以使用set_yticklabels函数的text参数来进一步控制格式(当然,该函数也适用于x轴。