沙漠玫瑰花图纸如何配比(南丁格尔玫瑰图的介绍和多种方法制作探讨及分析)
沙漠玫瑰花图纸如何配比(南丁格尔玫瑰图的介绍和多种方法制作探讨及分析)2.2 更重要的是纪念南丁格尔。2.1 一个是数据可视化效果明显。反映了当前医护人员逆行且在抗击疫情的第一线。图1和22.为什么选择南丁格尔图呢?
1.南丁格尔图
1.1 又叫:南丁格尔玫瑰图、鸡冠花图或极坐标区域图。
1.2 比如:
最近全国的抗击新冠病毒时,央视新闻和人民日报的这几张数据可视化图,很直观、很贴切。
反映了当前医护人员逆行且在抗击疫情的第一线。
图1和2
2.为什么选择南丁格尔图呢?
2.1 一个是数据可视化效果明显。
2.2 更重要的是纪念南丁格尔。
2.3 更是符合目前医护人员冲锋在抗击疫情的第一线,向医护人员致敬。
3.南丁格尔介绍
(1820年5月12日-1910年8月13日),
是一位英国护士和统计学家。
于1853年成为伦敦慈善医院的护士长。
是现代西医学上的第一位护士。
4.如何制作南丁格尔图呢?
4.1 网上有介绍商用在线制图软件等,此处略。
4.2 今天我自己探讨尝试其他方法,看看行不行,顺带复习python的相关知识。
=================================
★注意:以下数据不一定真实,仅供学习★
=================================
5.pyecharts法
5.1 代码:
#pyecharts版本v1.0
#xuguojun
#python3.8
#-*- coding: utf-8 -*-
#导出模块
from pyecharts import options as opts
from pyecharts.charts import Pie
#定义数据
name=['辽宁1天' '湖南2天' '天津3天' '河北3天' '四川3天' '江西3天' '安徽3天' '上海4天' '福建4天' '河南4天' '山西6天' '广西6天' '重庆6天' '吉林7天' '黑龙江8天' '云南10天' '陕西11天' '海南11天' '内蒙古12天' '江苏12天' '甘肃13天' '新疆(含兵团)13天' '贵州14天' '青海25天' '西藏32天']
data=[1 2 3 3 3 3 3 4 4 4 6 6 6 7 8 10 11 11 12 12 13 13 14 25 32]
color=['orange' 'orange' 'darkorange' 'darkorange' 'darkorange' '#f47920' '#f58220' '#d64f44' '#d93a49' '#a7324a' '#8552a1' '#694d9f' '#694d9f' '#2b4490' '#2a5caa' '#224b8f' '#426ab3' '#4e72b8' '#008792' '#65c294' '#45b97c' '#78a355' '#7fb80e' '#bed742' '#ffc20e']
#注意格式和注释说明
c = (
#其实就是一个带空心圆的pie饼图
Pie()
.add(
"" #这个空格的双引号不能少
#注意字典打包法
[list(z) for z in zip(name data)]
# radius第一个外半径,第2个参数内半径
radius=["20%" "80%"]
#图形和legend的位置,居中
#center = [x y],x为横坐标,y为纵坐标
center=["50%" "50%"]
is_clockwise=false #顺时针true,逆时针false
#rosetype="radius" #radius:扇区圆心角展现数据的百分比
rosetype="area" #area:所有扇区圆心角相同,半径展现数据大小
#这个是false就是不显示带导线的外标签
#在add内的是局部设定,如果是全局设定那就是.set如下
label_opts=opts.LabelOpts(is_show=False)
)
# set_colors设置颜色,可以用列表形式
.set_colors(color) #不设置就是默认,这是单独设置的
.set_global_opts(title_opts=opts.TitleOpts(title="南丁格尔玫瑰图pyecharts法")
# orient="vertical"设置图例垂直
legend_opts=opts.LegendOpts(orient="vertical" pos_top="15%" pos_right="2%")
)
)
#显示图,名字和格式,默认根目录下,双击打开即可
c.render('xgbd.html')
5.2 图
6.matplotlib-radar法
6.1 代码:
#xuguojun
#python3.8
#-*- coding: utf-8 -*-
#导出模块
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Circle
# 导出通用字体设置
from matplotlib import font_manager
#facecolor=color='b' linestyle='--' or '-'
#r=-1000,为内圆的半径,向内画圆形
cir = Circle(xy = (0.0 0.0) radius=1000 color='w')
# 本机设置:华文仿宋=hwfs,引出字体模块和位置
my_font = font_manager.FontProperties(fname="hwfs.ttf" size=20)
#定义对应颜色
color=['orange' 'orange' 'darkorange' 'darkorange' 'darkorange' '#f47920' '#f58220' '#d64f44' '#d93a49' '#a7324a' '#8552a1' '#694d9f' '#694d9f' '#2b4490' '#2a5caa' '#224b8f' '#426ab3' '#4e72b8' '#008792' '#65c294' '#45b97c' '#78a355' '#7fb80e' '#bed742' '#ffc20e']
labels =['辽宁1天' '湖南2天' '天津3天' '河北3天' '四川3天' '江西3天' '安徽3天' '上海4天' '福建4天' '河南4天' '山西6天' '广西6天' '重庆6天' '吉林7天' '黑龙江8天' '云南10天' '陕西11天' '海南11天' '内蒙古12天' '江苏12天' '甘肃13天' '新疆(含兵团)13天' '贵州14天' '青海25天' '西藏32天'] # 标签
#建立一个画布
fig=plt.figure() #默认figsize=(8 3),就是800×300
#建立一个坐标系,projection='polar'表示极坐标
ax = fig.add_subplot(111 projection='polar')
ax.add_patch(cir)
#代表从起点np.pi位置,开始加10个,因为width是np.pi/5,所以逐个加角度
#注意0.5pi就是垂直90°开始,但是有一个宽度问题,且i从0取值
x1=[np.pi*0.55 np.pi*i*2/25 for i in range(0 25)]
#雷达背景网格线默认on,设置off就是不显示
ax.axis('off')
#values=[1 2 3 3 3 3 3 4 4 4 6 6 6 7 8 10 11 11 12 12 13 13 14 25 32]
#y1代表扇形bar高低,这里的数值是示意图,如果采用上面的values值,那就显示不好看
y1=[1500 1500 1500 1700 1900 2000 2100 2200 2200 2200 2200 2300 2300 2500 2500 2500 2600 2700 2800 2800 2900 2900 3000 3500 4100]
#注意width 5分之π,就是10个柱子连在一起
#画25组扇形设置,x1位置,高低height,宽度width,颜色设置
ax.bar(x=x1 height=y1 width=np.pi*2/25 color=color edgecolor='w')
#画中心白色圆圈,半径1000
y2=[1000 for i in range(0 25)]
#w=white=白色
ax.bar(x=x1 height=y2 width=np.pi/5 color='w' edgecolor='w')
#增加u和fontproperties=my_font,可加u可不加u
plt.title(u'南丁格尔玫瑰图matplotlib-radar法' fontproperties=my_font)
plt.show()
6.2 图
7.echarts法:
7.1 代码:注意保存后,文件名:xxx.html
<!DOCTYPE html>
<html style="height: 100%">
<head>
<meta charset="utf-8">
</head>
<body style="height: 100%; margin: 0">
<div id="container" style="height: 100%"></div>
<!---在线地址引用法echarts.min.js--->
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/echarts/dist/echarts.min.js"></script>
<script type="text/javascript">
var dom = document.getElementById("container");
var myChart = echarts.init(dom);
var app = {};
option = null;
option = {
title: {
text: '南丁格尔玫瑰图echarts法'
//不需要subtext
//subtext: '南丁格尔玫瑰图'
x: 'center'
}
//环扇形的对应颜色
color:['orange' 'orange' 'darkorange' 'darkorange' 'darkorange' '#f47920' '#f58220' '#d64f44' '#d93a49' '#a7324a' '#8552a1' '#694d9f' '#694d9f' '#2b4490' '#2a5caa' '#224b8f' '#426ab3' '#4e72b8' '#008792' '#65c294' '#45b97c' '#78a355' '#7fb80e' '#bed742' '#ffc20e']
//
tooltip: {
trigger: 'item'
// {b}指series.data的name
formatter: "{b} "
}
//图形圆中间文字
graphic:{
type:"text"
left:"center"
top:"center"
style:{text:"多个省区市\n确诊病例连续多日\n零新增" textAlign:"center" fill:"black" fontSize:12}
}
// show=false=不显示,true就是显示
legend: {show:false
x: 'center'
y: 'bottom'
data: ['辽宁1天' '湖南2天' '天津3天' '河北3天' '四川3天' '江西3天' '安徽3天' '上海4天' '福建4天' '河南4天' '山西6天' '广西6天' '重庆6天' '吉林7天' '黑龙江8天' '云南10天' '陕西11天' '海南11天' '内蒙古12天' '江苏12天' '甘肃13天' '新疆(含兵团)13天' '贵州14天' '青海25天' '西藏32天']
}
//右上角的toolbox=工具箱,显示
toolbox: {
show: true
feature: {
mark: {show: true}
dataView: {show: true readOnly: false}
magicType: {show: true type: ['pie' 'funnel']}
restore: {show: true}
saveAsImage: {show: true}
}
}
calculable: true
series:
[
{stack: 'a'
type: 'pie'
clockwise:false //默认顺时针,饼图的扇区是否是顺时针排布。
minAngle: 15 //最小角度 f防止数值太小,角度太小不好看,模拟
startAngle:90 //起始角度
radius: [60 300]
//roseType:false
//是否展示成南丁格尔图,通过半径区分数据大小。
//可选择两种模式:'radius' 扇区圆心角展现数据的百分比,半径展现数据的大小。
//'area' 所有扇区圆心角相同,仅通过半径展现数据大小。
roseType: 'area'
// 表格线宽度和长度
// labelLine: {normal: {lineStyle: {width: 1} length: 2}}
// 设置值域的标签,奇怪,加入label后,外面的线条和指示标签就没了
// 搞懂了,如果没有下面的label设置,那就是默认outer的label
// 所以有了inner,那么上面的labelline就是不需要单独设置,注释掉
label: {show:false
normal: {
// inside=inner在里面
position: 'inside' // 设置标签位置,默认在饼状图外 可选值:'outer' ¦ 'inner(饼状图上)'
// formatter: '{a} {b} : {c}个 ({d}%)' 设置标签显示内容 ,默认显示{b}
// {a}指series.name {b}指series.data的name
// {c}指series.data的value 因为我的v值是示意值,不是真实的 {d}%指这一部分占总数的百分比
// 注意formatter的格式与pyecharts一样
formatter: '{b}'
}
}
data:
// 为了显示好看,下面的数据是不真实的
[
{value: 10 name: '辽宁1天'}
{value: 15 name: '湖南2天'}
{value: 20 name: '天津3天'}
{value: 20 name: '河北3天'}
{value: 20 name: '四川3天'}
{value: 20 name: '江西3天'}
{value: 20 name: '安徽3天'}
{value: 25 name: '上海4天'}
{value: 25 name: '福建4天'}
{value: 25 name: '河南4天'}
{value: 30 name: '山西6天'}
{value: 30 name: '广西6天'}
{value: 30 name: '重庆6天'}
{value: 35 name: '吉林7天'}
{value: 40 name: '黑龙江8天'}
{value: 45 name: '云南10天'}
{value: 50 name: '陕西11天'}
{value: 50 name: '海南11天'}
{value: 55 name: '内蒙古12天'}
{value: 55 name: '江苏12天'}
{value: 60 name: '甘肃13天'}
{value: 60 name: '新疆(含兵团)13天'}
{value: 65 name: '贵州14天'}
{value: 90 name: '青海25天'}
{value: 120 name: '西藏32天'}
]
//数据列表内容
}
//stack内容
//series列表内容
]
//option内容,很关键的位置,注意大括号和分号
};
if(option && typeof option === "object")
{myChart.setOption(option true)}
</script>
</body>
</html>
7.2 讲后缀改为xxx.html 双击打开即可
7.3 图
8.excel法
8.1.新建一个excel
注意本机是wps的excel,后缀是xls,与差不多操作
8.2.新建一组25×9的表格,全部为1
图e1
8.3.选中----插入----二维饼图----环形图,如图e2
8.4.点击圆环内圆,单击右键----弹出:选系列1或者1~9都可以,最好是1,就是第1列
调节圆环图内径大小一个合适的内圆
图e3
8.5.然后对局部颜色进行调整,很麻烦。
8.6.完成
图e4
小结完成。
向医护人员致敬!
向南丁格尔护士致敬!
向央视新闻和人民日报的制图人员致敬!