2016-03-30 17 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軸にset_xlimの最初と最後の点(5と50)がy軸上になくても、x軸には5,10,20,50 – Shew

答えて

0

このラインとax1.set_xlim([4,55])と行を交換してみてください:

ax1.set_xticks(x) 

あなたはまたax2.set_xlim(...)を削除することもできます。

期待したことはありますか?コメント後

UPDATE:

は、これらの行(:順序が重要!NOTE):使用してください

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

しか表示されません。 – Shew

+0

私はy軸とデータポイントの間にいくらかのスペースが必要なのでxlimを設定します。 – Shew

+0

私はあなたが何を意味するのか見て、申し訳ありません - そこにポイントを逃した。私はこれを私の答えに加えます。 – Primer