2011-10-24 13 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. ラベル形式(sciまたはplainのいずれかを使用)を指定すると、値のレンダリングを変更できます。 plainを使用している場合、値をそのままレンダリングします。詳細については、この関数のdocsを参照してください。 set_yticklabelsファンクションのtext引数を使用して、フォーマットをさらに制御することもできます(もちろん、その機能はx軸でも使用できます)。