2012-11-09 23 views
38

Tôi hiện tạo ra huyền thoại của tôi với matplotlib theo cách này:Làm thế nào để làm cho huyền thoại tùy chỉnh trong matplotlib

if t==25: 
    l1,l2 = ax2.plot(x320,vTemp320,'or',x320,vAnaTemp320,'-r') 
elif t==50: 
    l3,l4 = ax2.plot(x320,vTemp320,'ob',x320,vAnaTemp320,'-b') 
else: 
    l5,l6 = ax2.plot(x320,vTemp320,'og',x320,vAnaTemp320,'-g') 
plt.legend((l1,l2,l3,l4,l5,l6), ('t=25 Simulation', 't=25 Analytical','t=50 Simulation', 't=50 Analytical','t=500 Simulation', 't=500 Analytical'), 
    bbox_to_anchor=(-.25, 1), loc=2, borderaxespad=0.,prop={'size':12}) 

nào bằng cách nào đó làm việc thấy 1. Nhưng tôi có thông tin trùng lặp trong truyền thuyết của mình.

Tôi muốn tách biệt chú thích. Vì vậy, tôi có các đường màu khác nhau tương ứng với thời gian t. Và một dòng bình thường như giải pháp phân tích của tôi một dấu chấm cho kết quả mô phỏng của tôi.

Something như thế

- (đường màu đỏ) t = 25

- (đường màu xanh) t = 50

- (đường màu xanh) t = 500

o Simulaton

- Giải pháp phân tích

Có ai bây giờ làm thế nào tôi có thể đạt được điều này với matplotlib?

The current image

Trả lời

79

Bạn có thể chọn nghệ sĩ và nhãn để hiển thị trong chú giải như sau. Bạn sẽ cần tạo các nghệ sĩ tùy chỉnh cho các phần tử trong chú giải không thực sự được vẽ.

import matplotlib.pyplot as plt 
import numpy as np 

x = np.linspace(0,10,31) 

fig = plt.figure() 
ax = fig.add_subplot(1,1,1) 

#Plot analytic solution 
ax.plot(x,1*x**2, color='r', label="t = 25") 
ax.plot(x,2*x**2, color='b', label="t = 50") 
ax.plot(x,3*x**2, color='g', label="t = 500") 

#Plot simulation 
ax.plot(x,1*x**2, color='r', linestyle='', marker='o') 
ax.plot(x,2*x**2, color='b', linestyle='', marker='o') 
ax.plot(x,3*x**2, color='g', linestyle='', marker='o') 

#Get artists and labels for legend and chose which ones to display 
handles, labels = ax.get_legend_handles_labels() 
display = (0,1,2) 

#Create custom artists 
simArtist = plt.Line2D((0,1),(0,0), color='k', marker='o', linestyle='') 
anyArtist = plt.Line2D((0,1),(0,0), color='k') 

#Create legend from custom artist/label lists 
ax.legend([handle for i,handle in enumerate(handles) if i in display]+[simArtist,anyArtist], 
      [label for i,label in enumerate(labels) if i in display]+['Simulation', 'Analytic']) 

plt.show() 

Example plot

+0

Nhờ đó hoạt động hoàn hảo – tune2fs

+1

Đây có thể là một câu hỏi bằng tiếng Anh, nhưng những gì bạn có nghĩa là bởi "nghệ sĩ"? – LWZ

+4

Tôi có nghĩa là [nghệ sĩ] matplotlib (http://matplotlib.org/api/artist_api.html) lớp –

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