特别声明:本文仅谈科研,无关政治!!!
本文灵感来源于foxnews,之前推送容易被和谐,所以才等到结果公布之后才推送。
小编之前在浏览美国总统选举开票过程中在Foxnews中看见上面的实时开票状态图,也不知该图的学名叫什么,姑且就叫离散圆状态图。离散圆状态图可以展示4个维度的信息 —— 州名、票数、领先状态以及最终状态,是一种非常不错的多维度数据展示方法。
如此优秀的图表,能否采用matlab来实现呢?答案是肯定,说干就干,干就干成,经过小编一番琢磨,matlab版的美国总统大选状态图展现在了小编眼前。下面小编就来给大家念叨念叨如何实现的:
首先需要编写一个绘制圆形的程序用来专门绘制各个状态圆,其次需要定义各个圆的相对位置,再则需要在圆中添加数据标签,最后添加相应的背景颜色。细心的小伙伴应该发现,有的圆上还有小圆,而且颜色也是自定义的,这个其实只要搞定前面的步骤就能迎刃而解。
主程序
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 作者:bashan (巴山) %
% 欢迎关注 matlab爱好者 %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 内容:科研绘图之美国总统大选状态图的matlab实现
clc;clear;close all;
R = 2; % 半径
CX = [2,7,12,17,22,27,32,37,42,47]; % 圆心 X
CY = [37,32,27,22,17,12,7,2]; % 圆心 Y
theta = linspace(0,2*pi,100); % 角度
BG = backGColor; % 获取背景颜色
[ST,loc,num,sst,ss] = getLoc; % 获取州名、状态以及选举人票数
fig = figure('Position',[395 86 894 700],'Name','美国总统大选状态图绘制 —— matlab爱好者出品','NumberTitle','off','Color','w','Menubar','none');
title('matlab实现美国总统大选状态图绘制演示','Color','r','FontWeight','Bold','FontName','楷体','FontSize',30);
hold on;
xlim([0 50]);
ylim([-4 40]);
axis equal;
axis off;
for m = 1:8
for n = 1:10
C = [CX(n),CY(m)];
dotPlot(m,n,R,C,theta,BG,ST,num,loc,sst,ss);
if loc(m,n) ~= 0
pause(0.05);
end
end
end
% 绘制底部状态图例
plotFinal(theta,BG);
为了展示效果,小编专门做成了一个动态的展示图,如下:
美国总统选举结果离散圆状态图动态展示
本文仅是抛砖引玉,小伙伴们可以根据小编上方讲到的步骤去实现。本文所涉及的所有源代码已上传至原创代码共享Q群,如有需要源代码的伙伴且愿意支持小编工作,可在matlab爱好者公众号回复“原创”或“共享”获取相关信息。
参考资料:https://www.foxnews.com/elections/2020/general-results