2016-03-30 50 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