2011-10-24 80 views
4

我嘗試在python中創建條形圖時遇到了一些問題。我的圖表代碼如下所示:在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

基本上我的主要問題是這些值是與科學記數法小數。如果可能,我想以數百萬的價格呈現給他們。另外,我不確定如何製作,所以流派不會在底部被切斷。感謝您的任何幫助!

回答

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軸。)