南丁格尔玫瑰图和饼图类似,算是饼图的一种变形,用法也一样,主要用在需要查看占比的场景中。
首先需要导入我们需要使用的包,其中pandas用于数据整理,pyecharts用于绘图。
import pyecharts.options as opts
from pyecharts.charts import Pie
然后准备需要的数据,所用信息来自于https://jobtube.cn/global/,整理之后的数据使用列表的形式进行存储,其中 x_data 存储国家名称,y_data 存储确诊病例数字,组合为数值对后排序以便绘图使用。
color_series列表存储颜色用于后续的绘图使用。
x_data = ["美国", "西班牙", "意大利", "法国", "德国",'英国','土耳其','伊朗','中国','俄罗斯','巴西','加拿大','比利时','荷兰','瑞士','印度']
y_data = [939235, 223759, 195351, 164840, 157466,148377,107773,89328,84338,80949,59324,45354,45327,37190,28894,26496]
#饼图用的数据格式是[(key1,value1),(key2,value2)],所以先使用 zip函数将二者进行组合
data_pair = [list(z) for z in zip(x_data, y_data)] # 组合并推导为列表
data_pair.sort(key=lambda x: x[1])
color_series = ['#FAE927','#E9E416','#C9DA36','#9ECB3C','#6DBC49',
'#37B44E','#3DBA78','#14ADCF','#209AC9','#1E91CA',
'#2C6BA0','#2B55A1','#2D3D8E','#44388E','#6A368B'
'#7D3990']
最后使用Pyecharts库中的Pie类进行图形的绘制,代码说明如下,其中的配置项可以https://www.yuque.com/zhaoguanghui-jxq8m/vgbvep/kct547 进行查看,图形生成在本地的covid-19.html网页中。
import pyecharts.options as opts
from pyecharts.charts import Pie
x_data = ["美国", "西班牙", "意大利", "法国", "德国",'英国','土耳其','伊朗','中国','俄罗斯','巴西','加拿大','比利时','荷兰','瑞士','印度']
y_data = [939235, 223759, 195351, 164840, 157466,148377,107773,89328,84338,80949,59324,45354,45327,37190,28894,26496]
#饼图用的数据格式是[(key1,value1),(key2,value2)],所以先使用 zip函数将二者进行组合
data_pair = [list(z) for z in zip(x_data, y_data)] # 组合并推导为列表
data_pair.sort(key=lambda x: x[1])
color_series = ['#FAE927','#E9E416','#C9DA36','#9ECB3C','#6DBC49',
'#37B44E','#3DBA78','#14ADCF','#209AC9','#1E91CA',
'#2C6BA0','#2B55A1','#2D3D8E','#44388E','#6A368B'
'#7D3990']
(
# 实例化Pie类
Pie(init_opts=opts.InitOpts(width="1600px", height="800px", bg_color="#2c343c"))
.add(
series_name="国家",
data_pair=data_pair, # 数据
color=color_series, # 设置颜色
rosetype="area", # 展示成南丁格尔图
radius=["10%", "110%"],
center=["50%", "65%"],
label_opts=opts.LabelOpts(is_show=False),
)
.set_global_opts( # 设置全局配置项
title_opts=opts.TitleOpts(
title="全球疫情情况展示",
pos_left="center",
pos_top="20",
title_textstyle_opts=opts.TextStyleOpts(color="#fff"),
),
legend_opts=opts.LegendOpts(is_show=False),
)
.set_series_opts( # 设置系列配置项
tooltip_opts=opts.TooltipOpts(),
label_opts=opts.LabelOpts(is_show=True, position="inside", font_size=12,font_style="italic", font_family="Microsoft YaHei",formatter="{b}:{c}人",color="rgba(255, 255, 255, 0.3)"),
)
.render("covid-19.html")
)