更改后在Jupyter中绘制维恩图(matplotlib-venn)

时间:2017-06-06 09:28:34

标签: python matplotlib plot jupyter matplotlib-venn

通过遵循matplotlib-venn README中的命令,我可以在示例中生成初始图。但是,当我更改维恩图(标签文本等)的设置时,我无法弄清楚如何重新绘制图形。运行:

%matplotlib inline
from matplotlib_venn import venn3
v = venn3([set1, set2, set3], ('Set1', 'Set2', 'Set3'))

将维恩图内联。然后我继续更改标签

v.get_label_by_id('100').set_text('Arbitrary1')

但我不能重新绘制这个数字。我试过了

# from matplotlib import pyplot as plt
plt.plot()
plt.plot(v)
v
v()
但是我真的在黑暗中感觉到了。我觉得我遗漏了一些关于%matplotlibmatplotlib情节函数的基本内容,但我还没有在网上找到答案。

如何在Jupyter中再次绘制这个数字?

2 个答案:

答案 0 :(得分:5)

如果您使用fig=plt.figure()存储对图形实例的引用,那么您将可以访问未来笔记本单元格中的图形。如果您不这样做,那么您将无法访问新单元格中的现有数字。

因此,在设置标签后,您只需再次编写fig以再次显示该数字。

这是一个有效的例子:

单元格1:

%matplotlib inline
from matplotlib_venn import venn3
import matplotlib.pyplot as plt
fig = plt.figure()
set1 = set(['A', 'B', 'C'])
set2 = set(['A', 'D', 'E'])
set3 = set(['A', 'F', 'B'])

v = venn3([set1, set2, set3], ('Set1', 'Set2', 'Set3'))

单元格2:

v.get_label_by_id('100').set_text('Arbitrary1')
fig

enter image description here

答案 1 :(得分:1)

评估jupyter单元后,pyplot状态机的状态会丢失。因此,在新的单元格中,pyplot不知道之前创建的数字。

解决方案是在离开细胞之前获得对图的参考。这可以通过

完成
  • 明确地将数字分配给变量fig=plt.figure()
  • 将图形存储在单元格末尾的变量fig = plt.gcf()

在这两种情况下,只需输入fig,您就可以在后面的单元格中显示一个数字对象。 由于这是在jupyter笔记本中使用matplotlib的一般情况,以下示例不考虑维恩图。

enter image description here