2014-10-10 14 views
9

Có cách nào để thay đổi màu của các ô violin trong matplotlib không?Thay đổi màu sắc của các ô vĩ cầm của matplotlib

Màu mặc định là màu "nâu" này, không quá tệ, nhưng tôi muốn tô màu, ví dụ, 3 loại violon đầu tiên khác nhau để làm nổi bật chúng. Tôi không tìm thấy bất kỳ thông số nào trong số documentation. Bất kỳ ý tưởng hoặc hacks để màu sắc violin khác nhau?

enter image description here

+0

Bạn có thể mở một yêu cầu tính năng để thêm chức năng đó? Violin vẽ một tính năng mới trong 1,4 và (rõ ràng) vẫn cần một số tinh chỉnh. – tacaswell

+0

Làm thế nào bạn quản lý để sử dụng dấu vòng tròn trong cốt truyện của bạn? – xyz

Trả lời

17

matplotlib.pyplot.violinplot() nói nó sẽ trả về:

Từ điển ánh xạ mỗi thành phần của violinplot vào một danh sách các trường hợp bộ sưu tập tương ứng tạo ra. Từ điển có các phím sau:

  • bodies: Một danh sách các matplotlib.collections.PolyCollection trường hợp có chứa các khu vực điền của mỗi violin.
  • [... số những người khác ...]

Phương pháp PolyCollections bao gồm:

Vì vậy, có vẻ như bạn có thể chỉ lặp qua danh sách cơ thể của kết quả và sửa đổi các facecolor của mỗi:

violin_parts = plt.violinplot(...) 

for pc in violin_parts['bodies']: 
    pc.set_facecolor('red') 
    pc.set_edgecolor('black') 

Nó là một chút lạ dù rằng bạn không thể thiết lập này khi tạo ra nó giống như các loại cốt truyện chung. Tôi đoán nó có thể là do các hoạt động tạo ra rất nhiều bit (kể trên PolyCollection cùng với 5 khác LineCollections), rằng các đối số bổ sung sẽ không rõ ràng.

+1

Cảm ơn, 'cho bản vá, màu sắc trong zip (vplot ['cơ thể'], màu sắc): patch.set_color (màu)' đã làm công việc! – Sebastian

+0

Điều này có hiệu quả với ai đó không? Hãy cho tôi biết ... –

+0

Hoặc sử dụng 'plt.setp' để viết tắt, ví dụ: 'plt.setp (violin_parts ['cơ thể'], facecolor = 'đỏ', edgecolor = 'đen')' –

0
import numpy as np 
import matplotlib.pyplot as plt 
%matplotlib inline 

rrred = '#ff2222' 
bluuu = '#2222ff' 
x = np.arange(2, 25) 
y = np.array([xi * np.random.uniform(0, 1, 10**3) for xi in x]).T 

# Create violin plot objects: 
fig, ax = plt.subplots(1, 1, figsize = (8,8)) 
violin_parts = ax.violinplot(y, x, widths = 0.9, showmeans = True, showextrema = True, showmedians = True) 

# Make all the violin statistics marks red: 
for partname in ('cbars','cmins','cmaxes','cmeans','cmedians'): 
    vp = violin_parts[partname] 
    vp.set_edgecolor(rrred) 
    vp.set_linewidth(1) 

# Make the violin body blue with a red border: 
for vp in violin_parts['bodies']: 
    vp.set_facecolor(bluuu) 
    vp.set_edgecolor(rrred) 
    vp.set_linewidth(1) 
    vp.set_alpha(0.5) 

enter image description here

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