2016-03-30 47 views
0

我有下面的代碼,在x軸上,我想只顯示參數值,其中的公制值是5,10,20和50. 我想要參數值跨越x軸。matplotlib twinx在特定位置的xticks

我該怎麼做?

import matplotlib.pyplot as plt; 
import numpy as np; 
from matplotlib import rc; 

fig, ax1 = plt.subplots(); 
rc('mathtext', default='regular'); 
x = np.array([5,10,20,50]); 
cg1 = np.array([0.1,0.3,0.5,0.8]); 
cg2 = np.array([0.2,0.2,0.4,0.7]); 
cg3 = np.array([0.3,0.4,0.6,0.6]); 
lns1 = ax1.plot(x,cg1,'b*:',label='1 CG'); 
lns2 = ax1.plot(x,cg2,'bo--',label='2 CG'); 
lns3 = ax1.plot(x,cg3,'bs-',label='3 CG'); 
ax1.set_ylabel('CG',color='b'); 
ax1.set_ylim([0,1]); 
ax1.set_xlim([4,55]); 
ax1.set_xticklabels([5,10,20,50]); 
ax1.set_xlabel('K'); 

ax2 = ax1.twinx(); 
ld1 = np.array([0.8,0.5,0.2,0.2]); 
ld2 = np.array([0.6,0.2,0.3,0.2]); 
ld3 = np.array([0.2,0.4,0.6,0.2]); 
lns4 = ax2.plot(x,ld1,'k*:',label='1 ld'); 
lns5 = ax2.plot(x,ld2,'ko--',label='2 ld'); 
lns6 = ax2.plot(x,ld3,'ks-',label='3 ld'); 

lns = lns1 + lns2 + lns3 + lns4 + lns5 + lns6; 
labs = [l.get_label() for l in lns]; 
ax1.legend(lns, labs, loc='best', ncol=2); 
ax2.set_ylabel('LD',color='k'); 
ax2.set_ylim([0,1]); 
ax2.set_xlim([4,55]); 
plt.show(); 
+0

你能更具體嗎?你是什​​麼意思'我希望參數值跨越x軸。 – ThePredator

+0

我希望x軸僅顯示5,10,20和50 – Shew

回答

0

嘗試用ax1.set_xlim([4,55])這一行替換行:

ax1.set_xticks(x) 

您也可能想要刪除ax2.set_xlim(...)

它給你什麼你的預期?

更新後評論

請使用這些線(注:該命令的事項):

ax1.set_xlim([4,55]); 
ax1.set_xticks(x) 
... 
ax2.set_xlim([4,55]); 
ax2.set_xticks(x) 

,並刪除任何東西觸及xticks,像任何一個:

ax1.set_xticklabels([5,10,20,50]); 
ax2.set_xticklabels([5,10,20,50]); 

這應該會產生如下圖表:

enter image description here

其限制在[4, 55]並且只有選定的刻度值可見。

+0

而沒有set_xlim第一個和最後一個點(對於5和50)最終在y軸上。 – Shew

+0

我設置了xlim,因爲我想在y軸和數據點之間留出一些空間。 – Shew

+0

我明白你的意思,抱歉 - 錯過了那裏的觀點。我會添加這個給我答案。 – Primer