循序渐进,学会用pyecharts绘制玫瑰图
玫瑰图简介
绘图准备
安装pyecharts库
pip install pyecharts
准备示例数据
# coding=utf-8
import pandas as pd
fruits = {'香蕉': 115, '梨': 79, '椰子': 241, '柿子': 74, '鲜枣': 125,
'榴莲': 147, '石榴': 72, '菠萝蜜': 105, '牛油果': 143, '山楂': 102}
s_fruits = pd.Series(fruits)
print(s_fruits)
香蕉 115
梨 79
椰子 241
柿子 74
鲜枣 125
榴莲 147
石榴 72
菠萝蜜 105
牛油果 143
山楂 102
dtype: int64
绘制饼图
绘制饼图使用pyecharts中的Pie组件,先初始化一个Pie对象,调用add()方法添加绘图用的数据,再链式调用set_series_opts()、set_global_opts()设置饼图的标签、标题、图例等,最后链式调用render()方法将图形渲染到HTML文件中,可以用浏览器打开绘图结果。
from pyecharts.charts import Pie
from pyecharts import options as opts
# 饼图
pie = Pie(init_opts=opts.InitOpts(width='800px', height='600px', bg_color='white'))
pie.add(
'', [list(z) for z in zip([fruit for fruit in s_fruits.index], s_fruits)], center=['50%', '50%']
).set_series_opts(
label_opts=opts.LabelOpts(formatter="{b}: {c}"),
).set_global_opts(
title_opts=opts.TitleOpts(title='水果的热量对比(kcal/100g)', pos_left='300', pos_top='20',
title_textstyle_opts=opts.TextStyleOpts(color='black', font_size=16)),
legend_opts=opts.LegendOpts(is_show=False)
).render('fruits_calorie1.html')
绘制环形饼图
要将一个饼图设置成环形饼图,在添加数据的add()方法中使用radius参数设置。
# 环形饼图
pie = Pie(init_opts=opts.InitOpts(width='800px', height='600px', bg_color='white'))
pie.add(
'', [list(z) for z in zip([fruit for fruit in s_fruits.index], s_fruits)],
radius=['40%', '60%'], center=['50%', '50%']
).set_series_opts(
label_opts=opts.LabelOpts(formatter="{b}: {c}"),
).set_global_opts(
title_opts=opts.TitleOpts(title='水果的热量对比(kcal/100g)', pos_left='300', pos_top='20',
title_textstyle_opts=opts.TextStyleOpts(color='black', font_size=16)),
legend_opts=opts.LegendOpts(is_show=False)
).render('fruits_calorie2.html')
绘制玫瑰图
radius模式:用扇形圆心角展现数据的百分比,通过半径展现数据大小。
area模式:所有扇形圆心角相同,仅通过半径展现数据大小。
# 玫瑰图
pie = Pie(init_opts=opts.InitOpts(width='800px', height='600px', bg_color='white'))
pie.add(
'', [list(z) for z in zip([fruit for fruit in s_fruits.index], s_fruits)],
radius=['10%', '70%'], center=['50%', '50%'], rosetype="radius"
).set_series_opts(
label_opts=opts.LabelOpts(formatter="{b}: {c}")
).set_global_opts(
title_opts=opts.TitleOpts(title='水果的热量对比(kcal/100g)', pos_left='300', pos_top='20',
title_textstyle_opts=opts.TextStyleOpts(color='black', font_size=16)),
legend_opts=opts.LegendOpts(is_show=False)
).render('fruits_calorie3.html')
优化玫瑰图
先对数据进行排序。
调整radius的范围。
设置扇形颜色渐变。
# 玫瑰图美化
s_fruits = s_fruits.sort_values()
pie = Pie(init_opts=opts.InitOpts(width='800px', height='600px', bg_color='white'))
pie.add(
'', [list(z) for z in zip([fruit for fruit in s_fruits.index], s_fruits)],
radius=['10%', '70%'], center=['50%', '50%'], rosetype="radius"
).set_series_opts(
label_opts=opts.LabelOpts(formatter="{b}: {c}"),
).set_global_opts(
title_opts=opts.TitleOpts(title='水果的热量对比(kcal/100g)', pos_left='300', pos_top='20',
title_textstyle_opts=opts.TextStyleOpts(color='black', font_size=16)),
legend_opts=opts.LegendOpts(is_show=False)
).set_colors(
['rgb({r},0,{b})'.format(r=255-20*(len(s_fruits)-x+1), b=255-15*x) for x in range(len(s_fruits))]
).render('fruits_calorie4.html')
参考文档:
[1] pyecharts官方文档:https://pyecharts.org/#/zh-cn/basic_charts
评论