2016-10-27 7 views
3

ヒストグラムに色を付けると、さまざまな色のリストを受け取りますが、ハッチングに対しては1つの値しか受け入れません。ヒストグラム内の複数のデータ系列をハッチングします

これはコードです:

import numpy as np 
import matplotlib.pylab as plt 


data = [np.random.rand(100) + 10 * i for i in range(3)] 
ax1 = plt.subplot(111) 

n, bins, patches = ax1.hist(data, 20, histtype='bar', 
         color=['0', '0.33', '0.66'], 
         label=['normal I', 'normal II', 'normal III'], 
         hatch= ['', 'o', '/']) 

は、どのように私は別のシリーズごとに異なるハッチを持つことができますか?

+1

私はエラー 'TypeError例外を得た:

または@MadPhysicistはあなたに短縮することができ、各patch_setので、ループ上plt.setpを使用することができます指摘したように

代わりに 'hatch =( ''、 'o'、 '/')'のようなタプルはあなたが望むことをしますか? –

+0

これは、3つのハッチをそれぞれ1つずつではなく、それぞれに適用します。 ( "o /"をハッチとして使用する) –

答えて

5

histは、複数系列のプロットに対して複数のハッチをサポートするようには見えません。ただし、次のようにその周りを取得することができます。

import numpy as np 
import matplotlib.pylab as plt  

data = [np.random.rand(100) + 10 * i for i in range(3)] 
ax1 = plt.subplot(111) 

n, bins, patches = ax1.hist(data, 20, histtype='bar', 
         color=['0', '0.33', '0.66'], 
         label=['normal I', 'normal II', 'normal III']) 

hatches = ['', 'o', '/'] 
for patch_set, hatch in zip(patches, hatches): 
    for patch in patch_set.patches: 
     patch.set_hatch(hatch) 

histによって返されるオブジェクトpatchesは、(BarContainer.patches中)Patchオブジェクトのセットを保持しているそれぞれのBarContainerオブジェクトのリストです。したがって、各パッチオブジェクトにアクセスして、そのハッチを明示的に設定することができます。非ハッシュタイプ::「list'`ので、私が使用してみました

for patch_set, hatch in zip(patches, hatches): 
    plt.setp(patch_set, hatch=hatch) 
+1

リスト内包を1つのネストされたforループとして使用しないでください。それは後で投げなければならない 'None'値のリストを作ります。代わりにパッチとハッチングを取り、それらを適用する関数を作るだけかもしれません。 –

+1

onelinerは 'plt.setp'のメリットがあるようです。 –

関連する問題