2012-11-09 10 views
38

में कस्टम किंवदंती बनाने के लिए मैं वर्तमान में matplotlib इस तरह के साथ मेरी कथा उत्पन्न: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}) 

कौन सा किसी भी तरह से काम करता है 1 देखते हैं। लेकिन मेरे पास मेरी किंवदंती में डुप्लीकेट जानकारी है।

मैं किंवदंती को अलग करना पसंद करूंगा। तो मेरे पास समय टी के अनुरूप विभिन्न रंगीन रेखाएं हैं। और मेरे अनुकरण समाधान के रूप में एक सामान्य रेखा मेरे सिमुलेशन के परिणामों के लिए एक बिंदु है।

कुछ ऐसा

तरह - (लाल रेखा) टी = 25

- (नीली रेखा) टी = 50

- (हरे रंग की रेखा) टी = 500

ओ Simulaton

- विश्लेषणात्मक समाधान

करता है किसी को भी अब कैसे मैं कर सकता matplotlib के साथ इसे प्राप्त करें?

The current image

उत्तर

79

आप कलाकार और लेबल कथा में प्रदर्शित करने के लिए इस प्रकार के रूप में चुना जा सकता है। आपको पौराणिक कथाओं के तत्वों के लिए कस्टम कलाकार बनाना होगा जिन्हें वास्तव में प्लॉट नहीं किया गया है।

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

धन्यवाद कि सही काम करता है – tune2fs

+1

यह एक अंग्रेजी भाषा प्रश्न हो सकता है, लेकिन आप "कलाकार" से क्या मतलब है? – LWZ

+4

मेरा मतलब है matplotlib [कलाकार] (http://matplotlib.org/api/artist_api.html) कक्षा –