2011-01-20 38 views
8

Tôi cần phải giảm mật độ của nở trong một thanh được làm bằng matplotlib. Con đường tôi thêm hầm:Làm thế nào để giảm mật độ nở trong 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) 

Tôi biết rằng bạn có thể tăng mật độ bằng cách thêm nhân vật khác để mô hình, nhưng làm thế nào bạn có thể giảm mật độ ?!

+0

Bạn có thể thêm khoảng trống để mở không? – TryPyPy

Trả lời

8

Đây là một hack hoàn chỉnh, nhưng nó sẽ hoạt động cho kịch bản của bạn.

Về cơ bản, bạn có thể xác định mẫu hatch mới trở nên ít dày đặc, chuỗi đầu vào càng dài. Tôi đã đi trước và điều chỉnh mô hình HorizontalHatch cho bạn (lưu ý việc sử dụng các ký tự gạch dưới):

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 

Sau đó bạn phải thêm nó vào danh sách các mẫu hatch sẵn:

matplotlib.hatch._hatch_types.append(CustomHorizontalHatch) 

Trong mã âm mưu của bạn, bây giờ bạn có thể sử dụng mẫu được xác định:

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) 

Hãy nhớ rằng đây không phải là giải pháp rất thanh lịch và có thể phá vỡ bất kỳ lúc nào trong các phiên bản sau. Mã mẫu của tôi cũng chỉ là một bản hack nhanh và bạn có thể muốn cải thiện nó. Tôi được kế thừa từ HorizontalHatch nhưng để linh hoạt hơn, bạn sẽ xây dựng trên HatchPatternBase.

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