2011-01-20 29 views
8

, matplotlib ile yapılmış bir barda kapağın yoğunluğunu azaltmam gerekir. yolu Ben kapakları ekleyin:Matplotlib'de kapak yoğunluğunu azaltma

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) 

Sana desenine fazla karakter ekleyerek yoğunluğunu artırabilir biliyoruz, ama nasıl yoğunluğu azalabilir olabilir ?!

+0

Pencereye boşluk ekleyebilir misiniz? – TryPyPy

cevap

8

Bu tam bir kesmek, ancak senaryo için çalışmalıdır.

Temel olarak, giriş dizgisi ne kadar uzun olursa daha az yoğunlaşan yeni bir kapak modeli tanımlayabilirsiniz. Sürece devam ettik ve sizin için HorizontalHatch deseni (çizgi karakterinden kullanımını dikkat edin) adapte ettik:

matplotlib.hatch._hatch_types.append(CustomHorizontalHatch) 

:

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 

Ardından mevcut ambar desen listesine eklemek zorunda Bu çok zarif bir çözüm olmadığını akılda

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) 

Ayı ve gelecekteki sürümlerinde her an bozabilir: en komplo kodunda artık tanımlanmış desen kullanabilirsiniz. Ayrıca benim desen kodum sadece bir hızlı kesmek ve bunu geliştirmek isteyebilirsiniz. HorizontalHatch'dan miras aldım ama daha fazla esneklik için HatchPatternBase'u inşa edeceksin.