2011-01-20 2 views
8

必要がありますmatplotlibで作られたバーでハッチの密度を小さくする。 方法私はハッチを追加します。matplotlibのハッチ密度を減らす方法

kwargs = {'hatch':'|'} 
rects2 = ax.bar(theta, day7, width,fill=False, align='edge', alpha=1, **kwargs) 

kwargs = {'hatch':'-'} 
rects1 = ax.bar(theta, day1, width,fill=False, align='edge', alpha=1, **kwargs) 

私はあなたがパターンに複数の文字を追加することによって、密度を増加させることができることを知っているが、どのようにあなたが密度を低下ことができます!

+0

ハッチングに空白を追加できますか? – TryPyPy

答えて

8

これは完全なハックですが、あなたのシナリオではうまくいくはずです。

基本的には、入力文字列が長くなるほど密度が低くなる新しいハッチングパターンを定義できます。私は先に行って、あなたのためのHorizontalHatchパターン(アンダースコア文字の使用に注意してください)に適応しました:あなたは、利用可能なハッチングパターンのリストに追加する必要が

class CustomHorizontalHatch(matplotlib.hatch.HorizontalHatch): 
    def __init__(self, hatch, density): 
     char_count = hatch.count('_') 
     if char_count > 0: 
      self.num_lines = int((1.0/char_count) * density) 
     else: 
      self.num_lines = 0 
     self.num_vertices = self.num_lines * 2 

を:

matplotlib.hatch._hatch_types.append(CustomHorizontalHatch) 

これは非常にエレガントな解決策ではなく、将来のバージョンでいつでも壊れる可能性があることを念頭に置いて

kwargs = {'hatch':'_'} # same as '-' 
rects2 = ax.bar(theta, day7, width,fill=False, align='edge', alpha=1, **kwargs) 

kwargs = {'hatch':'__'} # less dense version 
rects1 = ax.bar(theta, day1, width,fill=False, align='edge', alpha=1, **kwargs) 

ベア:あなたのプロットのコードでは、今定義されたパターンを使用することができます。また、私のパターンコードはちょうど簡単なハックでもあり、それを改善したいかもしれません。私はHorizontalHatchから継承していますが、柔軟性を高めるためにはHatchPatternBaseを作成してください。

関連する問題