目录
前言
一、玫瑰图是什么?
二、实现步骤
1.引入相关的库和模块
2.读取数据并展示
3.构造年龄段序列
方法1:序列的加工 Series.agg(加工函数)
方法2:通过pd.cut()函数实现分箱
4.统计各平均速度区间行驶的车辆数
5.数据类型改造
6.绘制玫瑰图
总结
pyecharts是一个基于echarts.js和python的图表可视化库,它允许python开发者使用python语言轻松创建各种类型的交互式图表,如条形图、折线图、散点图、玫瑰图、地图等。同时提供一个简单的API接口和可视化的图形界面,方便用户交互地编辑和控制图表,使得数据分析与数据可视化更加简单和有趣。本文的内容就是运用pyecharts简单地绘制一张玫瑰图。
玫瑰图(Polar Rose Diagram)是一种基于极坐标系的数据可视化方式,通常用于展示周期性数据,如音频信号或电信号中的频率分布情况。因为这种图形类似于一朵玫瑰花朵,所以被称为玫瑰图。玫瑰图可以将多个变量的数据情况进行综合比较,以便更好地显示数据之间存在的模式和趋势。我们也可以将其简单理解成披着饼图外皮的柱状图。
代码如下:
import pandas as pd
from pyecharts import options as opts
from pyecharts.charts import Pie
pandas 是一个开源的 python 数据处理库,广泛应用于数据分析、机器学习和人工智能等领域。
pyecharts中的options则用于设置图表的全局配置参数。
pyecharts.charts模块可以创建各种类型图 。
data = pd.read_excel(r'新能源汽车行驶里程表.xlsx')
data
此处读取的是excel文件,文件所在路径与代码文件处于同目录,可根据具体情况进行修改。
文件内容如下:
此处我们将提供两种构造年龄段序列的方法,两种方法之间各有优劣,可根据需求进行选择:
Series.agg(加工函数) 是 Pandas 序列的一种数据加工方式,其中 agg() 表示对序列进行聚合操作,加工函数 可以是内置的如 mean()、sum()、min()、max()、count() 等函数,也可以是自定义的函数。
Series.agg(加工函数) 数据加工方式具有灵活性高、数据批量处理、可扩展性好等优势,但也存在内存消耗大、可读性较差等缺点,需要根据具体情况合理使用。
def speed_range(speed):
if speed<20:
return '0-20'
elif speed<30:
return '20-30'
elif speed<40:
return '30-40'
elif speed<50:
return '40-50'
else:
return '50以上'
data['平均速度区间'] = data['平均速度'].agg(speed_range)
Pandas 中的 pd.cut() 函数用于将数据进行离散化处理,将一组连续的数值型数据按照区间进行分组,每个区间内数据的分布状况可以揭示变量的分布情况,以便后续进行数据分析和建模。
pd.cut() 函数实现分箱具有方便的数据处理、可控的数据分布、容错性参数设置等优点;同时,也因分箱粒度的影响和数据集过小的劣势需要我们在实践中根据具体情况进行权衡和优化。
data['平均速度区间'] = pd.cut(data['平均速度'],bins=[0,20,30,40,50,100],labels=['0-20','20-30','30-40','40-50','50以上'])
将各平均速度区间行驶的车辆数统计出来可供我们对数据有更直观的了解
result = data.groupby(by='平均速度区间')['平均速度'].count()
result
数据展示:
数据类型改造是指在数据分析和建模过程中,将数据类型进行转换或预处理,以适应不同的分析和建模任务。数据类型改造可以在数据分析和建模的不同阶段中发挥重要作用,提高数据处理效率准确性,方便数据可视化和进行分析决策,同时,需要根据具体情况进行合理选择和处理。此处将数据类型改造成二维数组类型:
for x,y in zip(['a','b'], [1,2]):
print(x) # 输出元组对象(和列表类似的对象)
print(y)
list = [[x,int(y)] for x,y in zip(result.index, result.values)]
list
绘制玫瑰图并且对配置项进行配置 ,代码与饼图代码类似,部分代码作用已经用注释标出,具体代码如下:
c = (
Pie(init_opts=opts.InitOpts(width="1000px", height="800px")) # 设置背景的大小
.add(
series_name = "平均速度区间", # 必须项
data_pair = list,
radius=["20%", "40%"], # 设置环的大小
rosetype="radius", # 设置玫瑰图类型
label_opts=opts.LabelOpts(
position="outside",
formatter="{type|{a}:{b}}\n{number|个数:{c}}{percent|\n占比:{d}%}",
background_color="#D3FF93", # 大标签的背景颜色
border_color="black",
border_width=1,
border_radius=1,
rich={
"type": {"fontSize": 16, "lineHeight": 18, "align": "center"},
"number": {"fontSize": 16, "lineHeight": 18, "align": "center","backgroundColor": "yellow"},
"percent": {
"fontSize": 16,
"color": "yellow", # 字的颜色
"backgroundColor": "#aaa", # 模块背景颜色
"padding": [4, 10], # 控制模块的高度和长短
"borderRadius": 5, # 控制模块的角的形状
"height": 20, # 标题框高度
"align": "center",
},
},
), # 设置标签内容格式
)
.set_colors(["blue","purple", "yellow","green", "red"]) # 颜色设置
.set_global_opts(title_opts=opts.TitleOpts(title="新能源汽车行程均速分布玫瑰图"),
legend_opts=opts.LegendOpts(orient="vertical",pos_top="10%", pos_left="90%"), # 设置图示的位置
)
)
c.render_notebook()
对配置项进行修改可以改变玫瑰图的样式,可以多尝试修改,以加深印象。
下面则是代码运行后得到的玫瑰图,根据配置项配置的不同会呈现出不同的样式。
以上就是今天分享的内容,本文仅仅简单介绍了运用pyecharts绘制玫瑰图的方法,博主能力有限,希望能给你带来帮助。