0

我正在尝试使用 plt.figure 方法自定义维恩图的图形区域但无法获得预期的结果。

我正在尝试在绘图上创建黑色边框和白色背景,但图像仍然透明而没有边框。

我怀疑我的代码缺少一些基本的东西,但任何指针都会受到赞赏。这是我的代码。

from matplotlib import pyplot as plt
from matplotlib_venn import venn2, venn2_circles 

# Call 2 group Venn diagram
v = venn2(subsets = (10, 0, 5), set_labels = ('Euler', 'Venn'))
c = venn2_circles(subsets=(10,0,5), linestyle='dashed')

# Format
c[0].set_lw(2.0)
c[0].set_ls('dotted')
c[0].set_alpha(1)
c[0].set_color('#a6cee3')
c[1].set_lw(2.0)
c[1].set_ls('dotted')
c[1].set_alpha(1)
c[1].set_color('#b2df8a')

# Labels
plt.title("Diagrams")
for idx, subset in enumerate(v.subset_labels):
    v.subset_labels[idx].set_visible(False)

# Figure
plt.figure(linewidth=10, edgecolor="black", facecolor="white")
plt.show()
4

1 回答 1

0

您需要plt.figure()在调用任何绘图函数之前调用。因此,在调用 v = venn2(....

plt.figure()创建一个新区域来绘制或绘制一些东西,并且可以处理很多选项。如果您不调用plt.figure()或其他等效函数,matplotlib 会创建一个默认的figure. 当您plt.figure()稍后调用时,matplotlib 会启动一个新的 empty figure。通常,matplotlib 会显示两个窗口:第一个带有默认figure设置,第二个没有绘图。

完整的例子,稍微重写以利用循环,看起来像:

from matplotlib import pyplot as plt
from matplotlib_venn import venn2, venn2_circles


plt.figure(linewidth=10, edgecolor="black", facecolor="white")

# Call 2 group Venn diagram
v = venn2(subsets=(10, 0, 5), set_labels=('Euler', 'Venn'))
circles = venn2_circles(subsets=(10, 0, 5), linestyle='dashed')

# circle format
for circle, color in zip(circles, ['#a6cee3', '#b2df8a']):
    circle.set_lw(2.0)
    circle.set_ls('dotted')
    circle.set_alpha(1)
    circle.set_color(color)

# hide unwanted labels
for label in v.subset_labels:
    label.set_visible(False)

plt.title("Diagrams")
plt.show()
于 2020-01-29T20:33:57.830 回答