2013-06-01 6 views
9

matplotlibで100%スタックエリアチャートを作成する方法を知りました。 matplotlibのページで私はその例を見つけることができませんでした。matplotlibで100%スタックされたエリアチャートを作成

ここで誰かが私にそれを達成する方法を示すことができますか?これを達成するための

+3

どのように? –

+1

何か試しましたか?ほとんどの場合、作業コードがあれば、通常はより良い応答が得られます。それが立てば、この質問は「私の仕事をしてください」と読みます。 @LogicalKnightが指し示す例は良いスタートであり、そこへの道のりの95%を得ます。 – tacaswell

答えて

17

簡単な方法は、すべてのx値、y値の合計のために100

に私はあなたが例のように配列で編成y値を持っていることを前提としていることを確認することです以下、すなわち

y = np.array([[17, 19, 5, 16, 22, 20, 9, 31, 39, 8], 
       [46, 18, 37, 27, 29, 6, 5, 23, 22, 5], 
       [15, 46, 33, 36, 11, 13, 39, 17, 49, 17]]) 

列の合計が100であることを確認するために、あなたはその列の合計でy配列を分割する必要があり、その後、100を掛けこれは作り、y値が0から100にまたがるますy軸の「単位」パーセント。 Y軸の値が0から1までの範囲になるようにする場合は、100を掛けないでください。

y値がに設定されていても、上記のように配列、原則は同じです。 y値(例えば、y1,y2など)からなる各配列内の対応する要素は、合計100(または1)である必要があります。

以下のコードは、@ LogicalKnightのコメントにリンクされているexampleの修正バージョンです。

import numpy as np 
from matplotlib import pyplot as plt 

fnx = lambda : np.random.randint(5, 50, 10) 
y = np.row_stack((fnx(), fnx(), fnx())) 
x = np.arange(10) 

# Make new array consisting of fractions of column-totals, 
# using .astype(float) to avoid integer division 
percent = y/y.sum(axis=0).astype(float) * 100 

fig = plt.figure() 
ax = fig.add_subplot(111) 

ax.stackplot(x, percent) 
ax.set_title('100 % stacked area chart') 
ax.set_ylabel('Percent (%)') 
ax.margins(0, 0) # Set margins to avoid "whitespace" 

plt.show() 

これは、次の出力を示します。この[例](http://matplotlib.org/examples/pylab_examples/stackplot_demo.html)について

enter image description here

+0

正当な助けをいただきありがとうございます!私は現在、mpl 1.2.1で少し戦っていて、データを最初にプロットしていますが、この問題をもう一度見る時間がありませんでした。したがって、私はこの素敵なコードを手に入れて本当にうれしいです! 乾杯トーマス –

+0

は、私はちょうど今、自分自身をグラフスタックを製造するため、この方法を試してみた、と例外が、私はstackplot 'トレースバック(最後の最新の呼び出し)を呼び出すようにしようとするたびにスローされます。 ファイル「」を、 1行目、 ax.stackplot(圧力) AttributeError: 'AxesSubplot'オブジェクトには属性 'stackplot''がありません –

+1

@Magic_Matt_Man使用しているPythonとMatplotlibのバージョンは何ですか? – hooy

関連する問題