0

许多示例定义figax使用fig, ax = plt.subplots(),然后它们直接调用图形对象上的函数。相反,其他示例直接使用 plt. 这个答案解释了一些差异,但我仍然不清楚两件事。首先,如果我不创建单独的图形对象,我如何将它传递给另一个函数。例如,当我创建一个图形对象时,我可以将它传递mpld3给创建 D3 可视化:

d3plot = mpld3.fig_to_html(fig,template_type="simple")

其次,如果我确实创建了图形对象,那么我如何调用可以在图形上的 plt 上调用的函数?例如,我希望能够运行以下代码,然后将其作为图形传递给 mpld3,如上所述。

plt.imshow(wordcloud)
plt.axis("off")
plt.show()

另一个答案说 plt.subplots() 解包一个元组。我不确定它是否会解开 plt 上已有的内容。所以我尝试了:

wordcloud = WordCloud().generate(text)
plt.imshow(wordcloud)
plt.axis("off")
fig, ax = plt.subplots()
d3plot = mpld3.fig_to_html(fig,template_type="simple")

然而,这只是给了我一个黑色的情节,这与我之前的理解一致,即plt.subplots()创造了全新的数字。

更新 根据评论,我尝试了以下方法:

wordcloud = WordCloud().generate(text)
figTopicWordCloud, ax = plt.subplots()
ax.imshow(wordcloud)
ax.axis('off')
d3plot = mpld3.fig_to_html(figTopicWordCloud, template_type="simple")

虽然这成功地产生了情节,但它并没有从图中删除轴。

4

1 回答 1

0

当你运行类似的东西时

plt.imshow()

之前没有明确创建图形,matplotlib 创建了一个新的图形对象和一个新的轴对象。要访问图形使用

fig = plt.gcf()

这将返回当前数字。相似地,

ax = fig.gca()

为您提供对该图中当前活动轴的引用。打电话

fig, ax = plt.subplots()

但是,是以下内容的缩写:

fig = plt.figure()
ax = fig.add_subplot(111)

第一行将创建一个全新的图形对象。

您的案例的快速解决方案是绘制数据并在此之后访问隐式创建的图形,如下所示:

plt.imshow(wordcloud)
plt.axis("off")
fig = plt.gcf()
d3plot = mpld3.fig_to_html(fig, template_type="simple")

您还可以在实际绘图之前显式创建图形。你的例子会变成

fig = plt.figure()
ax = fig.gca()
ax.imshow(wordcloud)
ax.set_axis_off()
d3plot = mpld3.fig_to_html(fig, template_type="simple")

我通常会推荐此解决方案,因为您始终可以确定您正在绘制正确的数字。这在一次处理多个图形时特别有用。

于 2017-03-02T22:43:00.697 回答