2016-04-07 12 views
0

2つの異なるY軸を使用して2つのグラフを同じ図にプロットしたいとします。それに加えて、私はグリッドを追加し、PDFとしてプロットを保存したいと思います。グリッド使用時の主軸は表示されません

私の問題は、グリッドが正しく描画されている間に、主軸はもう表示されません。どのようにプロットすることもできますか?私はmatplotlib 1.5.1Python 2.7.11を使用しています。ここで

はプロットである:

enter image description here

そして、ここで私が使用していたコードです:

import matplotlib.pyplot as plt 
import numpy as np 
from matplotlib.backends.backend_pdf import PdfPages 

pp = PdfPages('myplot.pdf') 

x = np.linspace(0.1, 10, 100) 
y1 = np.exp(x) 
y2 = np.log(x) 

fig = plt.figure() 
ax1 = fig.add_subplot(111) 
ax1.plot(x, y1, '-ro', markersize=5, label='y1') 
ax1.set_ylim(-0.1, 1.1 * max(y1)) 
ax1.set_ylabel('y1', fontsize=20) 
ax1.legend(loc='upper left') 
ax1.grid(ls='dotted', c='k') 
ax1.patch.set_facecolor('white') 

ax2 = ax1.twinx() 
ax2.grid(False) 
ax2.plot(x, y2, 'b-', label='y2') 
ax2.set_ylim(-0.1, 1.1 * max(y2)) 
ax2.set_ylabel('y2', fontsize=20) 
ax2.legend(loc='upper right') 
plt.xlim([-0.5, 1.05 * max(x)]) 
ax1.set_xlabel('x', fontsize=20) 

pp.savefig(fig) 
pp.close() 
plt.close(fig) 
+0

それは私のために働く...(Python 3.4.4 mac OS)が、 'RuntimeWarning:logで遭遇したゼロで除算 'を投げる –

+0

@ReblochonMasque:まったく同じコードを使用していますか?あなたが得るプロットは私と違って見える? RunTimeWarningは 'log(0)'が計算された(私はそれを変更した)ために表示されます。 – Cleb

+0

はい、キャンバスの周りに軸とフレームが表示されます。私は2番目にpngを投稿します。 –

答えて

1

それが正しく追加PNGのような軸を示すプロットで私の作品ここにある。以下用

同じ出力:

  • Python 3.4.4, iPython, Jupyter notebook, matplotlib 1.5.1
  • Python 2.7.11, iPython, Jupyter notebook, matplotlib 1.5.?

enter image description here

使用されるコードはこの1つである - plt.show以外は投稿と同じ()を追加してpng画像を生成します。

import matplotlib.pyplot as plt 
import numpy as np 
from matplotlib.backends.backend_pdf import PdfPages 

pp = PdfPages('myplot.pdf') 

x = np.linspace(0, 10, 100) 
y1 = np.exp(x) 
y2 = np.log(x) 

fig = plt.figure() 
ax1 = fig.add_subplot(111) 
ax1.plot(x, y1, '-ro', markersize=5, label='y1') 
ax1.set_ylim(-0.1, 1.1 * max(y1)) 
ax1.set_ylabel('y1', fontsize=20) 
ax1.legend(loc='upper left') 
ax1.grid(ls='dotted', c='k') 
ax1.patch.set_facecolor('white') 

ax2 = ax1.twinx() 
ax2.grid(False) 
ax2.plot(x, y2, 'b-', label='y2') 
ax2.set_ylim(-0.1, 1.1 * max(y2)) 
ax2.set_ylabel('y2', fontsize=20) 
ax2.legend(loc='upper right') 
plt.xlim([-0.5, 1.05 * max(x)]) 
ax1.set_xlabel('x', fontsize=20) 

#plt.show() 

pp.savefig(fig) 
pp.close() 
plt.close(fig) 

ipythonカーネルを使用している場合、以前の作業の残りの設定によってレンダリングが妨げられることがありますか?新鮮なカーネルで試しましたか?

+0

これは予想される出力です。どのバージョンのmatplotlibを使用していますか(私は1.5.1を使用しています)?あなたはPython 2.7でそれを試すことができます。 – Cleb

+0

はい、matlot 1.5.1 python 3.4.4 on mac os。私は、Mac OSでPython 2.7.11と全く同じ結果を得ました(私は両方のカーネルを同時に実行していたことが幸いです)。どちらの場合もカーネルはjupyterノートブックから実行されました。 –

+0

コマンドラインから実行すると、正しいプロットが得られます。今、私はまだそれが上記のおもちゃの例では動作するのですが、実際のプロット(それでもまだ失敗します)では動作しない理由を理解しなければなりません...あなたの助けてくれてありがとう - 私は今それをupvoteし、後で受け入れる... – Cleb

関連する問題