2012-02-13 26 views
8

Dưới đây là một âm mưu đơn giản của tình hình:Matplotlib, huyền thoại với nhiều dấu hiệu khác nhau với một nhãn

plot example

Thay vì có mỗi điểm đánh dấu dữ liệu có một nhãn hiệu riêng biệt, tôi muốn để có thể có một nhãn cho một tập hợp các điểm đánh dấu khác nhau. Tôi muốn để có thể có một huyền thoại như:

<triangle> <square> <hexagon> <diamond> <circle> Shotcrete strength data points 
<green line> 10 minute strength 
<blue line> 60 minute strength 
<yellow line> 1 day strength 
<orange line> 7 day strength 
<red line> 28 day strength 

Tôi muốn làm điều này vì trong cốt truyện chính thức tôi sẽ có ba bộ các điểm dữ liệu và hiển thị 18 (3 bộ * 6 điểm/bộ) đánh dấu/kết hợp nhãn sẽ lộn xộn.

Tôi đang sử dụng Matplotlib với Python 2.7.

Trả lời

3

Lưu ý: Câu trả lời này được lưu giữ làm hướng dẫn cho câu trả lời đúng - nhưng không giải quyết được vấn đề đã nêu. Vui lòng xem bản chỉnh sửa bên dưới để biết vấn đề về bộ sưu tập Bản vá không được hỗ trợ trong matplotlib.


Một cách để đi về việc này, nếu bạn muốn hoàn toàn tùy biến là sử dụng một cái gọi là Proxy Artist:

from pylab import * 

p1 = Rectangle((0, 0), 1, 1, fc="r") 
p2 = Circle((0, 0), fc="b") 
p3 = plot([10,20],'g--') 
legend([p1,p2,p3], ["Red Rectangle","Blue Circle","Green-dash"]) 

show() 

Ở đây bạn có thể xác định chính xác những gì bạn muốn truyền thuyết trông giống như, và thậm chí sử dụng các hình dạng cốt truyện không chuẩn (bản vá).

Chỉnh sửa: Có một số khó khăn với phương pháp này, matplotlib only supports these Artists in a legend mà không cần chỉnh sửa. Đối với matplotlib v1.0 và trước đó, các nghệ sĩ được hỗ trợ như sau.

Line2D 
Patch 
LineCollection 
RegularPolyCollection 
CircleCollection 

Yêu cầu của bạn nhiều điểm phân tán sẽ được thực hiện với một Patch Collection, mà không được hỗ trợ trên. Theo lý thuyết với v1.1, điều này là có thể nhưng tôi không thấy như thế nào.

+1

Tôi hiện đang sử dụng các dòng psuedo để làm huyền thoại của mình. Tôi nghĩ rằng tôi có thể sử dụng một cái gì đó như thế này (http://matplotlib.sourceforge.net/users/legend_guide.html#legend-handler): 'mã' z = np.random.randn (10) p1a, = plt.plot (z, "ro", ms = 10, mfc = "r", mew = 2, mec = "r") # vòng tròn đầy màu đỏ p1b, = plt.plot (z [: 5 ], "w +", ms = 10, mec = "w", mew = 2) # chữ thập màu trắng plt.legend ([p1a, (p1a, p1b)], ["Attr A", "Attr A + B "]) ' mã' để kết hợp nhiều điểm đánh dấu vào một dòng. – CrazyArm

+0

@CrazyArm theo như tôi hiểu, bạn sẽ phải xác định hình dạng tùy chỉnh cho '' đó là lý do tại sao tôi đưa ra giải pháp như tôi đã làm. Bạn có thể trích xuất hình dạng biểu tượng từ nguồn đồ thị phân tán (hoặc từ bản thân phân tán) và sử dụng hình dạng tùy chỉnh đó làm đầu vào cho 'chú giải'. – Hooked

+0

Cảm ơn. Tôi nghĩ rằng tôi hiểu làm thế nào để làm cho một đánh dấu tùy chỉnh cá nhân trong truyền thuyết (một hình chữ nhật, hoặc vòng tròn như bạn đã đề cập), nhưng tôi không biết làm thế nào để đi về kết hợp hai trong số họ. Điều này (http://matplotlib.sourceforge.net/examples/api/scatter_piecharts.html) hiện nó bằng cách chồng chéo nhiều biểu tượng, nhưng tôi không biết làm thế nào họ sẽ hiển thị nó trên một huyền thoại. – CrazyArm

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