2016-11-19 64 views
0

我試圖繪製出現在不同時間的兩組數據。我的目標是在當時有兩組xaxis標籤對應該數據點,一個在另一個之上。到目前爲止,我有這樣的:添加一行到xtick標籤並更改顏色

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() 

這是覆蓋第一個ax.set_xticklabels,只繪製data2紅色時間。我怎樣才能將data1次數據保持爲藍色,並在xaxis下的data2次數爲紅色?

回答

0

問題是你確實覆蓋了標籤。爲了防止出現這種情況,一種選擇是使用另一個軸對象將數據從第二個圖繪製到。人們可以通過ax2 = ax.twiny()來創建另一個與第一軸的y軸相連的軸。這現在會導致標籤被繪製在劇情的頂部,這大部分都很好。

這裏要求在圖下面畫標籤。 請注意,下面的解決方案是獲得所需行爲的一種破解方式,並且存在一些缺點,例如調整大小時標籤的位置不固定。

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()