2013-06-24 17 views
8

Birkaç kapalı çokgen oluşturmak için python ve matplotlib kullanıyorum. Daha sonra bunları set_hatch ile yapılabilecek bir kapak ile doldurmam gerekiyor. Matplotlib'de özel bir kapakla çokgen doldurma?

http://matplotlib.org/examples/pylab_examples/hatch_demo.html

http://matplotlib.org/api/artist_api.html#matplotlib.patches.Patch.set_hatch

Ne yazık ki gri ölçekli görüntüler ile çalışıyorum ve ben varsayılan olarak sağlanan daha fazla kapakları ihtiyaç - yerine kiremitli edilebilecek bir bitmap (veya bazı benzer görüntü) sağlamak tercih ederim Bu kapakların farklı yoğunluklarda kullanılması.

Diğer python kitaplıklarına (pyglet, pygame, PIL vb.) Açığım ancak python'da olmasını tercih ederim.

+0

[özel kapakları] bir örnek (var http://stackoverflow.com/questions/4745937/how-to-decrease- hatch-yoğunluk-in-matplotlib? rq = 1) burada, ancak yazar kırılgan olduğunu söylüyor. – cphlewis

+1

Standart set_hatch, her biri en az iki yoğunlukta çalışabilen ve birleştirilebilen sekiz farklı bölüme sahiptir. Bir komplo, kapak kombinasyonlarından çıkmadan çok fazla kafa karıştırıcı olacağını düşünürdüm. Düzinelerce kullanılabilir dolgu ile greyscale kuluçka örneğiniz var mı? – cphlewis

cevap

6

matplotlib.hatch.Shapes alt sınıfını alt sınıflara ayırabilir ve birim karesi [[-0.5, 0.5] x [-0.5, 0.5]] içine çekilen herhangi bir referans yoluna göre özel bir kapak tanımlayabilirsiniz.

Kararsız:

import numpy as np 
import matplotlib.hatch 
import matplotlib.pyplot as plt 
from matplotlib.patches import Ellipse, Polygon 


house_path = Polygon(
    [[-0.3, -0.4], [0.3, -0.4], [0.3, 0.1], [0., 0.4], [-0.3, 0.1]], 
    closed=True, fill=False).get_path() 

class CustomHatch(matplotlib.hatch.Shapes): 
    """ 
    Custom hatches defined by a path drawn inside [-0.5, 0.5] square. 
    Identifier 'c'. 
    """ 
    filled = True 
    size = 1.0 
    path = house_path 

    def __init__(self, hatch, density): 
     self.num_rows = (hatch.count('c')) * density 
     self.shape_vertices = self.path.vertices 
     self.shape_codes = self.path.codes 
     matplotlib.hatch.Shapes.__init__(self, hatch, density) 

matplotlib.hatch._hatch_types.append(CustomHatch) 

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

ellipse = ax.add_patch(Ellipse((0.5, 0.5), 0.3, 0.5, fill=False)) 
ellipse.set_hatch('c') 
ellipse.set_color('red') 
plt.show() 

verilmesi:

enter image description here