能否调整matplotlib-venn/venn3图中圆圈的位置至指定样式?
自定义matplotlib-venn中venn3图的圆圈布局
要实现你需要的「上方一个圆、下方两个并排圆」的venn3布局,matplotlib-venn默认的三角排列无法满足,需要手动指定每个圆的中心位置和半径,具体实现代码如下:
from matplotlib_venn import venn3, venn3_circles import matplotlib.pyplot as plt # 创建画布 plt.figure(figsize=(8, 8)) # 定义集合及交集的大小,格式为(A, B, C, AB, AC, BC, ABC),按需替换为你的数据 subset_sizes = (15, 15, 15, 3, 3, 3, 1) # 手动设置三个圆的中心坐标(对应A、B、C)和半径 circle_centers = [(0, 0.5), (-0.5, -0.2), (0.5, -0.2)] circle_radii = [0.5, 0.5, 0.5] # 绘制venn图的轮廓圆圈 venn3_circles(subsets=subset_sizes, centers=circle_centers, radii=circle_radii, linewidth=2, color='black', linestyle='solid') # 绘制填充区域、标签及数值 venn_diagram = venn3(subsets=subset_sizes, centers=circle_centers, radii=circle_radii, set_labels=('集合A', '集合B', '集合C'), set_colors=('#8dd3c7', '#ffffb3', '#bebada'), alpha=0.6) # 调整标签字体大小(可选) for label in venn_diagram.set_labels: label.set_fontsize(12) for label in venn_diagram.subset_labels: if label: label.set_fontsize(10) # 保证圆圈显示为正圆形 plt.axis('equal') plt.title("自定义布局的三元Venn图") plt.show()
关键参数说明
circle_centers:按「上方圆、左下圆、右下圆」的顺序设置坐标,你可以根据需求微调数值,改变圆的位置。circle_radii:统一设置半径保证三个圆大小一致,也可以单独修改某个值调整单个圆的大小。subset_sizes:传入你的真实集合数据,格式严格对应「A的大小、B的大小、C的大小、AB交集、AC交集、BC交集、ABC交集」。plt.axis('equal'):必须添加,否则画布比例会导致圆圈变形为椭圆。
如果只需要绘制圆圈轮廓,去掉venn3相关代码,保留venn3_circles即可。
内容的提问来源于stack exchange,提问作者vanem
相关产品推荐
相关产品推荐

