【问题标题】:Main axis are not shown when using grid使用网格时不显示主轴
【发布时间】:2016-04-07 05:55:57
【问题描述】:

我想用两个不同的 y 轴将两个图形绘制成同一个图形。除此之外,我想添加一个网格,然后将绘图保存为 pdf。

我的问题是 - 虽然网格绘制正确 - 主轴不再显示。它们如何也被绘制出来?我正在使用matplotlib 1.5.1Python 2.7.11

剧情如下:

这是我正在使用的代码:

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)

【问题讨论】:

  • 它适用于我......(Python 3.4.4 mac OS)但抛出RuntimeWarning: divide by zero encountered in log
  • @ReblochonMasque:您使用的是完全相同的代码吗?你得到的情节看起来和我的不一样?出现 RunTimeWarning 是因为计算了 log(0)(我更改了它)。
  • 是的,它显示了画布周围的轴和框架。我会在一秒钟内发布一个 png。

标签: python matplotlib plot axis grid-layout


【解决方案1】:

它适用于我,绘图正确显示轴,就像在下面添加的 png 一样。

以下输出相同:

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

使用的代码就是这个 - 除了我添加的用于生成 png 图像的 plt.show() 之外,与发布的代码相同。

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 内核,之前工作中的一些残留设置可能会干扰渲染?您是否尝试过使用新内核?

【讨论】:

  • 这将是预期的输出。您使用的是哪个版本的 matplotlib(我使用的是 1.5.1)?你有机会在 Python 2.7 上尝试一下吗?
  • 是的,matplotlib 1.5.1 on python 3.4.4 on mac os。我在 mac os 上使用 python 2.7.11 得到了完全相同的结果(你很幸运我有两个内核同时运行;))。在这两种情况下,内核都是从 jupyter notebook 运行的。
  • 好的,从命令行运行它,确实会产生正确的绘图。现在我仍然需要弄清楚为什么它适用于上述玩具示例,但不适用于实际情节(它仍然失败)......感谢您的帮助 - 我现在赞成并稍后接受......
  • 对不起,我无法解决它,但是当无法重现故障时,很难做很多事情......很高兴我能谦虚地帮助你。 :) 干杯。
  • 哦,你已经帮了很多忙了,谢谢!似乎我发现了问题:在我的实际文件中,我也有一个 import seaborn 语句导致了问题。如果我评论它,一切都会按预期进行。如果没有您的“干扰”评论,我不会想到这一点。这就是为什么当我从命令行运行上面的示例时它起作用的原因:没有import seaborn。在我在同一个 ipython 会话中运行它之前,我也在运行 seaborn 东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-07-18
  • 2016-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多