2013-06-24 25 views
8

Tôi đang sử dụng python và matplotlib để tạo một số đa giác đã đóng. Sau đó tôi cần phải điền vào chúng với một nở, có thể được thực hiện thông qua set_hatch.Làm thế nào để điền vào một đa giác với một nở tùy chỉnh trong matplotlib?

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

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

Đáng tiếc là tôi đang làm việc với hình ảnh thang độ xám, và tôi cần thêm hầm hơn được cung cấp bởi mặc định - Tôi muốn cung cấp một bitmap (hoặc một số hình ảnh tương tự) có thể được lát gạch thay vì sử dụng những hầm này với mật độ khác nhau.

Tôi đang mở thư viện python khác (pyglet, pygame, PIL, v.v.) tuy nhiên tôi thích giải pháp nằm trong python.

+0

Có một ví dụ về [hầm tùy chỉnh] (http://stackoverflow.com/questions/4745937/how-to-decrease- hatch-density-in-matplotlib? rq = 1) ở đây, nhưng tác giả nói nó giòn. – cphlewis

+1

Set_hatch tiêu chuẩn có tám lỗ riêng biệt, mỗi cái có thể hoạt động ở ít nhất hai mật độ và có thể được kết hợp. Tôi sẽ nghĩ rằng một âm mưu sẽ quá khó hiểu trước khi bạn chạy ra khỏi sự kết hợp của nở. Bạn có một ví dụ về nở thang độ xám với hàng tá vật liệu có thể sử dụng được không? – cphlewis

Trả lời

6

Bạn có thể phân lớp matplotlib.hatch.Shapes và xác định nở tùy chỉnh dựa trên bất kỳ đường dẫn tham chiếu nào được vẽ bên trong ô vuông đơn vị [[-0,5, 0,5] x [-0,5, 0,5]].

dự kiến:

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() 

Giving:

enter image description here

Các vấn đề liên quan