南丁格爾玫瑰圖(新冠肺炎新增數據可視化)
import pandas as pd
from pyecharts.charts import Pie
from pyecharts import options as opts
數據
#省份
provinces = ['北京','上海','黑龍江','吉林','遼寧','內蒙古','新疆','西藏','青海','四川','雲南','陝西','重慶',
'貴州','廣西','海南','澳門','湖南','江西','福建','安徽','浙江','江蘇','寧夏','山西','河北','天津']
#0新增持續天數
num = [1,1,1,17,9,22,23,42,35,7,20,21,16,24,16,21,37,12,13,14,13,7,22,8,16,13,13]
# 顏色序列
color_series = ['#FAE927','#E9E416','#C9DA36','#9ECB3C','#6DBC49',
'#37B44E','#3DBA78','#14ADCF','#209AC9','#1E91CA',
'#2C6BA0','#2B55A1','#2D3D8E','#44388E','#6A368B'
'#7D3990','#A63F98','#C31C88','#D52178','#D5225B',
'#D02C2A','#D44C2D','#F57A34','#FA8F2F','#D99D21',
'#CF7B25','#CF7B25','#CF7B25']
數據排序
# 創建數據框
df = pd.DataFrame({'provinces': provinces, 'num': num})
# 降序排序
df.sort_values(by='num', ascending=False, inplace=True)
# 提取數據
v = df['provinces'].values.tolist() #省份
d = df['num'].values.tolist() #無新增天數
畫圖
# 實例化Pie類
pie1 = Pie(init_opts=opts.InitOpts(width='1350px', height='750px'))
# 設置顏色
pie1.set_colors(color_series)
# 添加數據,設置餅圖的半徑,是否展示成南丁格爾圖
pie1.add("", [list(z) for z in zip(v, d)]
#畫圖的數據
# ,color=color_series
,radius=["30%", "135%"]
# 餅圖的半徑,數組的第一項是內半徑,第二項是外半徑
# 默認設置成百分比,相對於容器高寬中較小的一項的一半
,center=["50%", "65%"]
# 餅圖的中心(圓心)座標,數組的第一項是橫座標,第二項是縱座標
# 默認設置成百分比,設置成百分比時第一項是相對於容器寬度,第二項是相對於容器高度
, rosetype="area"
# rosetype ='area':所有扇區圓心角相同,僅通過半徑展現數據大小,
#如果設置rosetype ='radius':表示扇區圓心角展現數據的百分比,半徑展現數據的大小
)
# 設置全局配置項
pie1.set_global_opts(title_opts=opts.TitleOpts(title='玫瑰圖示例'),
legend_opts=opts.LegendOpts(is_show=False),
toolbox_opts=opts.ToolboxOpts())
# 設置系列配置項
pie1.set_series_opts(label_opts=opts.LabelOpts(is_show=True, position="inside", font_size=12,
formatter="{b}:{c}天", font_style="italic",
font_weight="bold", font_family="Microsoft YaHei"
),
)
# 生成html文檔
pie1.render('南丁格爾玫瑰圖.html')
'E:\\Files\\Python_Learn\\案例練習\\南丁格爾玫瑰圖.html'
pyecharts 玫瑰圖示例
https://github.com/pyecharts/pyecharts-gallery/blob/master/Pie/pie_rosetype.py
from pyecharts import options as opts
from pyecharts.charts import Pie
from pyecharts.faker import Faker
v = Faker.choose()
c = (
Pie()
.add(
"",
[list(z) for z in zip(v, Faker.values())],
radius=["30%", "75%"],
center=["25%", "50%"],
rosetype="radius",
label_opts=opts.LabelOpts(is_show=False),
)
.add(
"",
[list(z) for z in zip(v, Faker.values())],
radius=["30%", "75%"],
center=["75%", "50%"],
rosetype="area",
)
.set_global_opts(title_opts=opts.TitleOpts(title="Pie-玫瑰圖示例"))
.render("pie_rosetype.html")
)