当前位置: 首页 > news >正文

MATLAB | 情人节画个花瓣venn图?

之前七夕节情人节各种花,相册,爱心啥的都快画够了,今年画个花瓣韦恩图?


花瓣上的数字是仅属于该类的样本数,而中心的数字是属于每一类的样本数


教程部分

0 数据准备

% 给组起名t1 t2 t3...t15
setName = compose('t%d', 1:15);% 随机生成数据
Data = [rand(200, 15) > .1; rand(200, 15) > .85];% 设置字体
numFont = {'FontSize', 14, 'FontName', 'Times New Roman'};
labFont = {'FontSize', 16, 'FontName', 'Times New Roman'};

其中Data数据是个0-1矩阵,矩阵每一行代表一个样本,如果第n列是1代表该样本属于第n类,是0则代表不属于。


1 配色

CList = lines(15);
% C = flowerPlotColor();
% CList = C.CList631;

这里直接取MATLAB自带的lines配色,当然我也准备了很多其他配色,可以复制下来用:

function C=flowerPlotColor
C.CList1877 = [0.2431    0.3294    0.58820.5098    0.5647    0.73330    0.5569    0.80780.3490    0.7804    0.92160.0275    0.4431    0.52940.4157    0.6667    0.71760.0392    0.5647    0.52550.3294    0.7490    0.71760.5569    0.1255    0.26270.7373    0.4784    0.56080.8784    0.3765    0.49410.9255    0.6275    0.69800.9961    0.6275    0.56470.9961    0.8118    0.78040.7216    0.7373    0.75690.8824    0.8863    0.8980];
C.CList1514 = [0.4078    0.5647    0.81570.9098    0.7843    0.65880.9725    0.8784    0.72160.9725    0.9725    0.97250.2196    0.3137    0.43920.5333    0.6588    0.97250         0         00.5961    0.5961    0.69020.3451    0.4706    0.56470.8471    0.8471    0.97250.7216    0.7216    0.81570.8157    0.6902    0.56470.7216    0.5961    0.47060.2510    0.4078    0.62750.7216    0.7843    0.9725];
C.CList1596 = [0.2549    0.5490    0.94120.9882    0.7059    0.25490.8784    0.2510    0.03920.0196    0.3922    0.57250.7490    0.7490    0.74900.1020    0.2314    0.41181.0000    0.8902    0.50980.0706    0.6118    0.86670.7922    0.4196    0.29410    0.3608    0.85880.9529    0.8235    0.53330.3137    0.3882    0.50590.9451    0.7255    0.65880.8784    0.5137    0.03920.4706    0.5765    0.7451];
C.CList1470 = [0.1882    0.4078    0.59610.2824    0.5020    0.69020.9098    0.8157    0.62750.7843    0.6902    0.50200.3765    0.5961    0.78430.1255    0.1882    0.28240         0         00.4078    0.3765    0.28240.5961    0.5333    0.37650.5647    0.7529    0.90980.2196    0.3137    0.47060.6902    0.7216    0.75290.9725    0.9725    0.97250.5020    0.5333    0.59610.9725    0.9098    0.7843];
C.CList1827 = [1.0000    0.6118         00.9686    0.7412    0.35291.0000    0.8000    0.60001.0000    1.0000    0.20001.0000    1.0000    0.61180.8039    0.3882    0.38820.8000    0.6000    0.80001.0000    0.6196    0.38820.3922    0.4275    0.80000.6118    0.6118    1.00000.2000    0.6000    1.00000.6000    0.8000    1.00001.0000    1.0000    0.80000.6941    0.5843    0.47840.9294    0.5333    0.29800.9608    0.9294         00.8667    1.0000    1.0000];
C.CList1607 = [0.8863    0.5686    0.56860.6000    0.8667    0.57250.5765    0.8471    0.72550.5804    0.7686    0.82750.5804    0.6039    0.80780.7020    0.5804    0.80000.8000    0.5882    0.69410.8000    0.6431    0.60000.8745    0.8980    0.57251.0000    0.6471    0.37650.4196    1.0000    0.38820.3961    1.0000    0.80000.3961    0.7686    1.00000.3961    0.4196    1.00000.6784    0.3961    1.00001.0000    0.3961    0.95691.0000    0.3961    0.51761.0000    0.3961    0.3961];
C.CList631 = [0.1059    0.6392    0.77650.1725    0.7098    0.75290.1882    0.7373    0.67840.1294    0.6902    0.52940.2000    0.6510    0.36080.3412    0.6392    0.21570.6353    0.7137    0.15290.8353    0.7333    0.12940.9725    0.7137    0.12550.9725    0.5725    0.09020.9412    0.4039    0.09800.8784    0.2039    0.14900.9647    0.2863    0.44310.9882    0.4431    0.61960.9216    0.4510    0.70200.8078    0.4118    0.74510.6353    0.4275    0.76080.4706    0.4510    0.75290.3098    0.4863    0.7294];
end




2 数据处理及图窗生成

% 数据计算
cT = linspace(0, 2*pi, 200);
cX = cos(cT).*8 + 8;
cY = sin(cT).*3;
cXY = [cX;cY];
setNum = size(Data, 2);
rT = 2*pi./setNum;
rM = [cos(rT),-sin(rT); sin(rT),cos(rT)];uniq = sum(Data.*(sum(Data,2) == 1),1);
core = sum(sum(Data,2) == setNum);figure('Units', 'normalized', 'Position', [.1,.1,.5,.8]);
ax=gca;
ax.NextPlot = 'add';
ax.DataAspectRatio = [1,1,1];
ax.XColor = 'none';
ax.YColor = 'none';

3 绘制花

% 绘制椭圆花瓣
for i = 0:setNum-1iXY = rM^i*cXY;fill(iXY(1,:), iXY(2,:), CList(i+1,:), 'FaceAlpha', .4, 'EdgeColor', 'none');
end
% 绘制白色边缘线
if 1
for i = 0:setNum-1iXY = rM^i*cXY;plot(iXY(1,:), iXY(2,:), 'Color', 'w', 'LineWidth', 1.2);
end
end
fill(cos(cT).*2.3, sin(cT).*2.3, [1,1,1], 'EdgeColor', 'none')


4 绘制文本

% 绘制文本信息
for i = 1:setNumtR = (i-1)*rT/pi*180;if tR>=0 && tR<=180tR = tR-90;elsetR = tR+90;endtext(cos((i-1)*rT).*13, sin((i-1)*rT).*13, num2str(uniq(i)),...'HorizontalAlignment', 'center',...'VerticalAlignment', 'middle',...'Rotation', tR,...numFont{:})text(cos((i-1)*rT).*17, sin((i-1)*rT).*17, setName{i},...'HorizontalAlignment', 'center',...'VerticalAlignment', 'middle',...'Rotation', tR,...labFont{:})
end
text(0, 0, {'core';num2str(core)},...'HorizontalAlignment', 'center',...'VerticalAlignment', 'middle',...labFont{:})


完整代码

% flowerPlotDemo% 给组起名t1 t2 t3...t15
setName = compose('t%d', 1:15);% 随机生成数据
Data = [rand(200, 15) > .1; rand(200, 15) > .85];% 设置字体
numFont = {'FontSize', 14, 'FontName', 'Times New Roman'};
labFont = {'FontSize', 16, 'FontName', 'Times New Roman'};% 设置配色
CList = lines(15);
% C = flowerPlotColor();
% CList = C.CList631;% =========================================================
% 绘图部分代码
% ---------------------------------------------------------
% 数据计算
cT = linspace(0, 2*pi, 200);
cX = cos(cT).*8 + 8;
cY = sin(cT).*3;
cXY = [cX;cY];
setNum = size(Data, 2);
rT = 2*pi./setNum;
rM = [cos(rT),-sin(rT); sin(rT),cos(rT)];uniq = sum(Data.*(sum(Data,2) == 1),1);
core = sum(sum(Data,2) == setNum);figure('Units', 'normalized', 'Position', [.1,.1,.5,.8]);
ax=gca;
ax.NextPlot = 'add';
ax.DataAspectRatio = [1,1,1];
ax.XColor = 'none';
ax.YColor = 'none';% 绘制椭圆花瓣
for i = 0:setNum-1iXY = rM^i*cXY;fill(iXY(1,:), iXY(2,:), CList(i+1,:), 'FaceAlpha', .4, 'EdgeColor', 'none');
end
% 绘制白色边缘线
if 1
for i = 0:setNum-1iXY = rM^i*cXY;plot(iXY(1,:), iXY(2,:), 'Color', 'w', 'LineWidth', 1.2);
end
end
fill(cos(cT).*2.3, sin(cT).*2.3, [1,1,1], 'EdgeColor', 'none')% 绘制文本信息
for i = 1:setNumtR = (i-1)*rT/pi*180;if tR>=0 && tR<=180tR = tR-90;elsetR = tR+90;endtext(cos((i-1)*rT).*13, sin((i-1)*rT).*13, num2str(uniq(i)),...'HorizontalAlignment', 'center',...'VerticalAlignment', 'middle',...'Rotation', tR,...numFont{:})text(cos((i-1)*rT).*17, sin((i-1)*rT).*17, setName{i},...'HorizontalAlignment', 'center',...'VerticalAlignment', 'middle',...'Rotation', tR,...labFont{:})
end
text(0, 0, {'core';num2str(core)},...'HorizontalAlignment', 'center',...'VerticalAlignment', 'middle',...labFont{:})

相关文章:

  • 002 - Hugo, 自动部署博客
  • Linux第52步_移植ST公司的linux内核第4步_关闭内核模块验证和log信息时间戳_编译_并通过tftp下载测试
  • 关于Build Your Own Botnet的尝试
  • 如何用 ChatGPT 做项目管理?
  • 吴恩达机器学习全课程笔记第一篇
  • 第十五章 以编程方式使用 SQL 网关 - %SQLGatewayConnection 方法和属性
  • C# CAD SelectionFilter下TypedValue数组
  • N叉树的层序遍历
  • borb,一个好用的 Python 库!
  • Vue 新版 脚手架 初始化 笔记
  • 安卓版本与鸿蒙不再兼容,鸿蒙开发工程师招疯抢
  • 【探索Linux】—— 强大的命令行工具 P.22(POSIX信号量)
  • 【Linux系统化学习】缓冲区
  • 一篇文章入门postmain接口测试
  • 算法||实现典型数据结构的查找、添加和删除数据 并分析其时间和空间复杂度
  • Elasticsearch 参考指南(升级前重新索引)
  • flask接收请求并推入栈
  • Git的一些常用操作
  • java中具有继承关系的类及其对象初始化顺序
  • linux安装openssl、swoole等扩展的具体步骤
  • Mysql数据库的条件查询语句
  • Nodejs和JavaWeb协助开发
  • Python学习笔记 字符串拼接
  • Swoft 源码剖析 - 代码自动更新机制
  • TCP拥塞控制
  • Vue2.0 实现互斥
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 给github项目添加CI badge
  • 观察者模式实现非直接耦合
  • 力扣(LeetCode)56
  • 巧用 TypeScript (一)
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 十年未变!安全,谁之责?(下)
  • 使用Gradle第一次构建Java程序
  • Python 之网络式编程
  • 函数计算新功能-----支持C#函数
  • ​ssh免密码登录设置及问题总结
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • ###STL(标准模板库)
  • #Spring-boot高级
  • #考研#计算机文化知识1(局域网及网络互联)
  • (1)Android开发优化---------UI优化
  • (1)常见O(n^2)排序算法解析
  • (145)光线追踪距离场柔和阴影
  • (done) 两个矩阵 “相似” 是什么意思?
  • (Note)C++中的继承方式
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (TOJ2804)Even? Odd?
  • (ZT)出版业改革:该死的死,该生的生
  • (笔试题)分解质因式
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (简单) HDU 2612 Find a way,BFS。