2016-11-19 5 views
0

Ich versuche, zwei Sätze von Daten, die zu unterschiedlichen Zeiten auftreten. Mein Ziel ist es, zwei Sätze von Xaxis-Beschriftungen zu haben, die zu diesem Zeitpunkt dem jeweiligen Datenpunkt in Farbe entsprechen und übereinander liegen. Bisher hat ich dies:Fügen Sie eine Zeile zu Xtick Etiketten hinzu und ändern Sie die Farbe

import numpy as np 
import matplotlib.pyplot as plt 

data1 = [4, 5, 3, 6] 
data2 = [1, 6, 7, 2] 

xlabel = ['2120', '2125', '2129', '2133'] 
xlabel2 = ['\n 2115', '\n 2118', '\n 2121', '\n 2124'] 

xticks = np.arange(0, len(data1) ,1) 

fig = plt.figure(figsize=[8.0,5.0]) 
ax = fig.add_subplot(111) 
ax.plot(xticks, data1, color='b', label='Data 1') 
ax.plot(xticks, data2, color='r', label='Data 2') 
xmajor_ticks=np.arange(0,4,1) 
ax.set_xticks(xmajor_ticks) 
ax.set_xticklabels(xlabel, color='b') 
ax.set_xticklabels(xlabel2, color='r') 
ax.set_xlim([-0.5,3.5]) 
ax.set_xlabel('Time')    
ax.legend(loc='upper left') 
ax.grid() 

Dies ist die ersten ax.set_xticklabels überschreibt und nur zeichnet die Daten2 rote Zeiten. Wie kann ich die Daten1 mal blau mit den Daten2 mal rot unten auf der Xaxis halten?

Antwort

0

Das Problem ist, dass Sie tatsächlich die Ticklabels überschreiben. Um dies zu verhindern, besteht eine Möglichkeit darin, mit einem anderen Achsenobjekt die Daten aus dem zweiten Plot zu zeichnen. Man kann das über ax2 = ax.twiny() machen, was eine andere Achse erzeugt, die mit der y-Achse der ersten Achsen verbunden ist. Dies würde nun dazu führen, dass die Etiketten oben auf dem Plot gezeichnet werden, was meistens in Ordnung ist.

Hier ist es auch erforderlich, Beschriftungen unterhalb der Grafik zu zeichnen. Beachten Sie, dass die folgende Lösung eine Art Hack ist, um das erforderliche Verhalten zu erzielen, und dass einige Nachteile wie eine nicht fixierte Position der Beschriftungen bei der Größenänderung auftreten.

import numpy as np 
import matplotlib.pyplot as plt 

data1 = [4, 5, 3, 6] 
data2 = [1, 6, 7, 2] 

xlabel = ['2120', '2125', '2129', '2133'] 
xlabel2 = ['2115', '2118', '2121', '2124'] 

xticks = np.arange(0, len(data1) ,1) 

fig = plt.figure(figsize=[8.0,5.0]) 
ax = fig.add_subplot(111) 
ax2 = ax.twiny() 
pl1, = ax.plot(xticks, data1, color='b', label='Data 1') 
pl2, = ax2.plot(xticks, data2, color='r', label='Data 2') 

ax2.spines['top'].set_position(('axes',-0.1)) 
ax2.spines['top'].set_visible(False) 
ax2.xaxis.set_tick_params(size=0) 

xmajor_ticks=np.arange(0,4,1) 
ax.set_xticks(xmajor_ticks) 
ax2.set_xticks(xmajor_ticks) 
ax.set_xticklabels(xlabel, color='b') 
ax2.set_xticklabels(xlabel2, color='r') 
ax.set_xlim([-0.5,3.5]) 
ax2.set_xlim([-0.5,3.5]) 
ax.set_xlabel('Time')    
ax.legend(handles=[pl1, pl2], labels= ['Data 1' ,'Data 2'], loc='upper left') 
ax.grid() 
plt.show() 
Verwandte Themen