【问题标题】:Matplotlib modified histograms won't display after modificationMatplotlib 修改直方图修改后不显示
【发布时间】:2020-01-24 15:29:42
【问题描述】:

我已经绘制了一个直方图并想对其进行修改,然后重新绘制它。如果不重新定义 FigureAxes 对象定义,它将不会再次绘制。我正在使用 Jupyter Notebook,而且我是 matplotlib 的新手,所以我不知道这是否是我对 matplotlib 不了解的地方,是 Jupyter Notebook 的问题还是其他问题。

这是我的第一段代码:

"""Here's some data."""
some_data = np.random.randn(150)
"""Here I define my `Figure` and `Axes` objects."""
fig, ax = plt.subplots()
"""Then I make a histogram from them, and it shows up just fine."""
ax.hist(some_data, range=(0, 5))
plt.show()

这是我的第一个代码块的输出:

这是我的第二个代码块:

"""Here I modify the parameter `bins`."""
ax.hist(some_data, bins=20, range=(0, 5))
"""When I try to make a new histogram, it doesn't work."""
plt.show()

我的第二个代码块生成没有可见的输出,这是问题

这是我的第三个也是最后一个代码块:

"""But it does work if I define new `Figure` and `Axes` objects. 
Why is this? 
How can I display new, modified plots without defining new `Figure` and/or `Axes` objects? """
new_fig, new_ax = plt.subplots()
new_ax.hist(some_data, bins=20, range=(0, 5))
plt.show()

这是我的第三个也是最后一个代码块的输出:

提前致谢。

【问题讨论】:

  • 您正在使用内联后端;所以你可以在第二个代码块中用fig替换plt.show()
  • 感谢@ImportanceOfBeingEarnest。我按照您的建议做了并使用了fig 而不是plt.show()(您可以看到我在下面的代码块中注释掉了plt.show())。问题是新修改的情节位于原始情节之上。有没有办法用修改后的情节替换原来的情节?这是代码:ax.hist(some_data, bins=20, range=(0, 5))# plt.show()fig这是输出Modified Hist
  • 如果不创建新图,会显示在旧图上,是的。

标签: matplotlib jupyter-notebook histogram


【解决方案1】:

当您生成图形或轴时,在用于渲染或显示之前,它仍可用于渲染或显示。在第一个块中执行 plt.show() 后,ax 将不可用。您的第三个代码块显示了一个绘图,因为您正在重新生成图形和轴。

【讨论】:

  • 感谢@Yaakov Bressler。那么有没有什么方法可以渲染更新版本的图而不需要重新定义它,就像在 pandas 中查看 DataFrame 的更新版本一样?
  • 您可以尝试在plt.show() 命令中未消散的初始化fig 上绘图。否则,我建议重新绘制和重新显示,除非这违背了项目的目标,在这种情况下你应该考虑子图。
  • 谢谢,非常感谢!
猜你喜欢
  • 2014-01-15
  • 2017-11-17
  • 2020-09-10
  • 1970-01-01
  • 1970-01-01
  • 2012-03-31
  • 2014-07-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多