2016-12-16 2 views
1

スタックされたヒストグラムを作成しようとしています。スタックされた各コンポーネントのライニングスタイルと色は異なります。 color引数は、各コンポーネントの色でリストとして受け入れます。しかし、linestyleの引数lsはありません。スタックされたコンポーネントのそれぞれのフェイスとラインスタイルを個別に制御する方法はありますか?pyplot hist()スタックされたコンポーネントごとに別々のlinestyleを返します

import numpy as np 
import matplotlib.pyplot as plt 

x = np.random.random(100) 

# this works: 
plt.hist([x,x], histtype='stepfilled', stacked=True, color=['r', 'b']) 

# this does not: 
plt.hist([x,x], histtype='stepfilled', stacked=True, color=['r', 'b'], ls=['-', '--']) 

理想的には、私は両方color各積層要素の顔面との両方にEdgeColorのalphaを完全に制御するたいです。それは可能ですか?私はfcオプションで遊んでみましたが、それはまたリストを受け入れません。

私はこの例を[]に示していますが、非常にハッキングしているようです。たとえば、次のコードでは、バグのある結果が得られます。この回答にpatchesを引くと同様に、それらを別々に制御するための回避策はあり

plt.hist([(0,1,1), (0,0,1)], histtype='step', stacked=True, fill=True) 

[2]。しかし、それはplt.hist()から直接可能でもあるのだろうか?

[1] http://matplotlib.org/examples/statistics/histogram_demo_multihist.html

[2] https://stackoverflow.com/a/17517721/5064815

答えて

1

することはでき同じ方法でcycle through the linestylesあなたが他のパラメータを循環することができますように。

import numpy as np 
import matplotlib.pyplot as plt 
from cycler import cycler 

plt.rc('axes', prop_cycle=(cycler('color', ['r', 'g', 'b']) + 
          cycler('linestyle', ['-', '--', ':']) + 
          cycler('linewidth', [4,3,1]))) 

x = np.random.random(100) 
plt.hist([x,x*0.8,x*0.5], histtype='stepfilled', stacked=True) 

plt.show() 

追記:私は現在のサイクルの順序は、この例では逆になる理由には手掛かりを持っていない、すなわち青色形状は太い実線線種を有します。しかし、私はそれが必要に応じて適応できると思います。

+0

ありがとうございます!しかし、これは後続のすべてのプロットのために 'prop_cycle'を変更すると思いますか?だから、 'hist'をプロットした後にリセットする必要があります。私はそれをもっと "直接"行う方法にはまだ興味があると思います。 – lab

関連する問題