2017-02-09 11 views
0

私は、パンダをプロットした棒グラフを持っていて、複数のy軸を挿入したいと思います。下のコード(図のリンクを参照)から生成されたチャートをプロットすると、最初の2つのブロックがスケーリングには小さすぎることがわかります。すべてのブロックがうまく表示されるように、複数のy軸を挿入するにはどうすればよいですか? axis.twinx()を使うと、列の値だけが1つのy軸に割り当てられますが、私は望むようにブロック全体ではありません。パンダと複数のy軸を使ってプロットする

from matplotlib import pyplot as plt 
import pandas as pd 

g = ['A1', 'B2', 'C3'] 
params = ['one', 'two', 'three'] 
data = [[1, 3e-5, 400], [2, 5e-5, 300], [1.5, 4e-5, 350]] 

data_dict = dict(zip(g,data)) 
df=pd.DataFrame(data=data_dict,index=params,columns=g) 
fig0, ax0 = plt.subplots() 
ax1 = ax0.twinx() 

df.plot(kind='bar', ax=ax0) 

fig0.show() 

bar Chart plot with only one y-axis

+0

http://matplotlib.org/examples/api/two_scales.html – Chuck

+0

[異なるスケールとmatplotlibの中の複数の軸]の可能な重複(http://stackoverflow.com/questions/ 9103166/matplotlib-with-different-scales) – Chuck

+0

何桁ものデータにログスケールを使用しないのはなぜですか? 'ax0.set_yscale( 'log')' – tom

答えて

1

3つのparamsのためのスケールがそう完全に異なっているので、それはおそらく三つの異なるサブプロットを使用する意味があります。

from matplotlib import pyplot as plt 
import pandas as pd 

g = ['A1', 'B2', 'C3'] 
params = ['one', 'two', 'three'] 
data = [[1, 3e-5, 400], [2, 5e-5, 300], [1.5, 4e-5, 350]] 

data_dict = dict(zip(g,data)) 
df=pd.DataFrame(data=data_dict,index=params,columns=g) 

fig0, ax = plt.subplots(ncols=3, figsize=(10,4)) 

for i, p in enumerate(params): 
    df.loc[[p,p], :].plot(kind='bar', ax=ax[i],) 
    ax[i].set_xlim([-.5,.5]) 

plt.tight_layout() 
plt.show() 

enter image description here

+0

ありがとう、多分それは最高です。より良い概観のために、私はちょうどそれが1つのブロックに入れることが可能かどうか疑問に思った。 – Lala

+0

これを1つのブロック(サブプロット)に入れることはできますが、軸スケーリングを置く場所は問題になります。 – ImportanceOfBeingErnest

関連する問題