2016-07-15 7 views
3

Wenn ich verschiedene disjunkte Linien mit einem Aufruf plotten wie folgt ...Python mehrere Zeilen als eine Gruppe

>>> import matplotlib.pyplot as plt 
>>> x = [random.randint(0,9) for i in range(10)] 
>>> y = [random.randint(0,9) for i in range(10)] 
>>> data = [] 
>>> for i in range(0,10,2): 
...  data.append((x[i], x[i+1])) 
...  data.append((y[i], y[i+1])) 
... 
>>> print(data) 
[(6, 4), (4, 3), (6, 5), (0, 4), (0, 0), (2, 2), (2, 0), (6, 5), (2, 5), (3, 6)] 
>>> plt.plot(*data) 
[<matplotlib.lines.Line2D object at 0x0000022A20046E48>, <matplotlib.lines.Line2D object at 0x0000022A2004D048>, <matplotlib.lines.Line2D object at 0x0000022A2004D9B0>, <matplotlib.lines.Line2D object at 0x0000022A20053208>, <matplotlib.lines.Line2D object at 0x0000022A20053A20>] 
>>> plt.show() 

enter image description here

ich herausfinden kann nicht, wie ich Python/matplotlib es zu sehen, wie eine einzige Handlung, in der gleichen Farbe, Linienbreite, ect und derselben Legende Eintrag ...

Ihnen im Voraus danken

Antwort

1

Wenn Sie sie nichts dagegen haben alle in einer Zeile zusammengeführt werden, als Sie einfach plt.plot(x,y) verwenden sollten. Aber ich denke, Sie möchten sie als separate Zeilen behalten. Dazu können Sie die Stilargumente zu Ihrem Plot comamnd angeben und dann den Code aus Stop matplotlib repeating labels in legend verwenden, um mehrere Legendeneinträge zu verhindern.

import matplotlib.pyplot as plt 
import numpy as np 
from collections import OrderedDict 

x = [np.random.randint(0,9) for i in range(10)] 
y = [np.random.randint(0,9) for i in range(10)] 
data = [] 
for i in range(0,10,2): 
    data.append((x[i], x[i+1])) 
    data.append((y[i], y[i+1])) 

#Plot all with same style and label. 
plt.plot(*data,linestyle='-',color='blue',label='LABEL') 

#Single Legend Label 
handles, labels = plt.gca().get_legend_handles_labels() 
by_label = OrderedDict(zip(labels, handles)) 
plt.legend(by_label.values(), by_label.keys()) 

#Show Plot 
plt.show() 

Geben Sie
enter image description here

0

Wie wäre das?

import numpy as np 
d = np.asarray(data) 
plt.plot(d[:,0],d[:,1]) 
plt.show() 
Verwandte Themen