【问题标题】:How to draw Venn Diagram on MATLAB?如何在 MATLAB 上绘制维恩图?
【发布时间】:2021-01-20 15:30:00
【问题描述】:

我必须绘制一些维恩图来显示字符串数组之间的交叉点。让我解释一下:我有一个名称类别,其中包括三个彼此不相交的名称。我想了解这三个中哪一个在上面提到的宏观类别中所占的比例最大。我想用 MATLAB 来做,但我发现这个开发环境有点缺乏这样的功能。如果您有任何想法,我将不胜感激。 提前致谢!

【问题讨论】:

  • 您需要绘制此图,还是只计算百分比?请提供示例数据集和预期输出。
  • 我需要一个情节。样本数据集可以是 A={'A','B','C','D','E','F','G','H','I','L'} B={ 'A','B','C','D'} C= {'E','F','G','H','I','L'}

标签: matlab matlab-figure matlab-deployment venn-diagram


【解决方案1】:

绘制圆圈的维恩图

不是最优雅的方式,但绘制维恩图的一种方法可以是绘制圆圈并使用 text() 注释/标签填充各个圆圈。不幸的是,我在这里手动放置了标签居中的位置。自动化标签定位可能需要几个额外的步骤,为了简单起见,我将省略这些步骤。为了找到各个数据集的交集,我简单地使用了intersect() 函数。

A = {'A','B','C','D','E','F','G','H','I','L'};
B = {'A','B','C','D'};
C = {'E','F','G','H','I','L'};

%Finding the intersections of the arrays%
Intersection_AB = intersect(A,B);
fprintf("Intersection AB: ")
disp(Intersection_AB);
fprintf("\n");

Intersection_BC = intersect(B,C);
fprintf("Intersection BC: ")
disp(Intersection_BC);
fprintf("\n");

Intersection_AC = intersect(A,C);
fprintf("Intersection AC: ")
disp(Intersection_AC);
fprintf("\n");

Intersection_ABC = intersect(Intersection_AB,C);
fprintf("Intersection ABC: ")
disp(Intersection_ABC);
fprintf("\n");
clc;

clf;
Plotting_Interval = 0.01;
Angles_In_Radians = (0: Plotting_Interval: 2*pi);
Circle_Plot = @(X_Offset,Y_Offset,Radius) plot(X_Offset + Radius*cos(Angles_In_Radians),Y_Offset + Radius*sin(Angles_In_Radians));

hold on
%Plotting the 3 circles%
X_Offset_A = 0; Y_Offset_A = 2; Radius_A = 3;
Circle_A = Circle_Plot(X_Offset_A,Y_Offset_A,Radius_A);
fill(Circle_A.XData, Circle_A.YData,'r','FaceAlpha',0.2,'LineWidth',1);

X_Offset_B = -2; Y_Offset_B = -2; Radius_B = 3;
Circle_B = Circle_Plot(X_Offset_B,Y_Offset_B,Radius_B);
fill(Circle_B.XData, Circle_B.YData,'g','FaceAlpha',0.2,'LineWidth',1);

X_Offset_C = 2; Y_Offset_C = -2; Radius_C = 3;
Circle_Plot(X_Offset_C,Y_Offset_C,Radius_C);
Circle_C = Circle_Plot(X_Offset_C,Y_Offset_C,Radius_C);
fill(Circle_C.XData, Circle_C.YData,'b','FaceAlpha',0.2,'LineWidth',1);
title("Venn Diagram");

%Writing all the labels%
A_Label = strjoin(string(A));
text(X_Offset_A,Y_Offset_A,A_Label,'color','r');

B_Label = strjoin(string(B));
text(X_Offset_B,Y_Offset_B,B_Label,'color','g');

C_Label = strjoin(string(C));
text(X_Offset_C,Y_Offset_C,C_Label,'color','b');

AB_Label = strjoin(string(Intersection_AB));
text(-1.2,0,AB_Label);

BC_Label = strjoin(string(Intersection_BC));
text(0,-2,BC_Label);

AC_Label = strjoin(string(Intersection_AC));
text(1.2,0,AC_Label);

ABC_Label = strjoin(string(Intersection_ABC));
text(0,0,ABC_Label);

%Setting the labels to be relative to the centres%
set(findall(gcf,'type','text'),'HorizontalAlignment','center');
axis equal
axis off

使用 MATLAB R2019b 运行

【讨论】:

  • 非常感兴趣!我会在接下来的几天里尝试一下,让你知道它如何与我的数据匹配!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-27
相关资源
最近更新 更多