一、实验目的及要求
掌握pyecharts数据可视化环境搭建以及pyecharts交互式基础图形的绘制。
(1)掌握pyecharts中初始配置项,系列配置项,全局配置项的配置方法。
(2)掌握pyecharts中条形图的绘制方法。
(3)掌握pyecharts中散点图的绘制方法。
(4)掌握pyecharts中折线图的绘制方法。
(5)掌握pyecharts中箱线图的绘制方法。
(6)掌握pyecharts中3D散点图的绘制方法。
(7)掌握pyecharts中饼图的绘制方法。
第一题
利用pyecharts绘制商家A和商家B销售的条形图,数据:商家A和商家B的各类商品的销售数据.xlsx。要求:要有初始配置项,系列配置项和全局配置项的各种配置,包括:画布宽度,高度,主题风格,添加主标题,标签位置向右,条形图方向为横向,有动画效果,并添加平均值标记线。
商家 衬衫 毛衣 领带 裤子 风衣 高跟鞋 袜子 商家A 120 56 28 98 129 28 107 商家B 60 140 153 145 160 70 54 from pyecharts import options as opts from pyecharts.charts import Bar import pandas as pd from pyecharts.globals import ThemeType# 读取数据 df = pd.read_excel('商家A和商家B的各类商品的销售数据.xlsx', index_col='商家')# 计算平均值 average_value = df.mean().mean() # 计算所有商品销售量的平均值# 创建横向条形图 bar = (Bar(init_opts=opts.InitOpts(width='1000px', height='600px', theme=ThemeType.LIGHT)).add_xaxis(df.columns.tolist()) # 设置X轴为商品类型.add_yaxis('商家A', df.loc['商家A'].tolist(),label_opts=opts.LabelOpts(position='right'), # 标签显示在右侧itemstyle_opts=opts.ItemStyleOpts(color="#C1232B"),markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_="average", name="商家A平均值")])).add_yaxis('商家B', df.loc['商家B'].tolist(),label_opts=opts.LabelOpts(position='right'), # 标签显示在右侧itemstyle_opts=opts.ItemStyleOpts(color="#2F4554"),markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_="average", name="商家B平均值")])).reversal_axis() # 设置条形图方向为横向.set_global_opts(title_opts=opts.TitleOpts(title='商家A和商家B销售的条形图'),xaxis_opts=opts.AxisOpts(name='销售量'),yaxis_opts=opts.AxisOpts(name='商品类型'),tooltip_opts=opts.TooltipOpts(trigger="axis"), # 提示框触发方式).set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}")) # 设置标签格式 )# 渲染图表到HTML文件 bar.render('第一题.html')
第二题
利用pyecharts绘制学生身高和体重关系的散点图,数据:学生身高和体重数据.xlsx。要求:要有初始配置项,系列配置项和全局配置项的各种配置,包括:画布宽度,高度,主题风格,添加主标题,标记点大小设置,形状设置,x轴和y轴刻度线设置,分割线设置,对视觉映射配置项VisualMap进行设置,最大值最小值要和数据匹配,标记点的过渡色设置。
from pyecharts.charts import Scatter from pyecharts import options as opts import pandas as pd# 读取Excel文件中的数据 df = pd.read_excel('学生身高和体重数据.xlsx')# 确保数据中有 '身高' 和 '体重' 列 height = df['身高'].tolist() weight = df['体重'].tolist()# 创建一个散点图对象 scatter = Scatter()# 添加数据到散点图 scatter.add_xaxis(height) scatter.add_yaxis(series_name='学生身高与体重关系',y_axis=weight,symbol_size=10, # 标记点大小设置symbol='circle', # 形状设置label_opts=opts.LabelOpts(is_show=False) # 不显示标签 )# 设置全局配置项 scatter.set_global_opts(title_opts=opts.TitleOpts(title='学生身高和体重关系散点图'), # 添加主标题xaxis_opts=opts.AxisOpts(type_='value',name='身高 (cm)',axisline_opts=opts.AxisLineOpts(linestyle_opts=opts.LineStyleOpts(color='#5793f3')),splitline_opts=opts.SplitLineOpts(is_show=True, linestyle_opts=opts.LineStyleOpts(color='#5793f3'))),yaxis_opts=opts.AxisOpts(type_='value',name='体重 (kg)',axisline_opts=opts.AxisLineOpts(linestyle_opts=opts.LineStyleOpts(color='#d14a61')),splitline_opts=opts.SplitLineOpts(is_show=True, linestyle_opts=opts.LineStyleOpts(color='#d14a61'))),visualmap_opts=opts.VisualMapOpts(max_=max(weight), # 设置最大值,确保与数据匹配min_=min(weight), # 设置最小值,确保与数据匹配range_color=['#d14a61', '#dea356', '#f4e925', '#5793f3'] # 标记点的过渡色设置) )# 渲染图表为HTML文件 scatter.render('第二题.html')
第三题
利用pyecharts绘制商家A和商家B销售的折线图,数据:商家A和商家B的各类商品的销售数据.xlsx,要求:努力美化所画的折线图,可以参照第一个任务的方法。
from pyecharts import options as opts from pyecharts.charts import Line import pandas as pd from pyecharts.globals import ThemeType# 读取数据 df = pd.read_excel('商家A和商家B的各类商品的销售数据.xlsx', index_col='商家')# 创建折线图 line = (Line(init_opts=opts.InitOpts(width='1000px', height='600px', theme=ThemeType.LIGHT)) # 设置主题.add_xaxis(df.columns.tolist()) # 设置X轴为商品类型.add_yaxis('商家A', df.loc['商家A'].tolist(), # 添加商家A的数据label_opts=opts.LabelOpts(is_show=True, position='top', color='#C1232B'), # 标签设置symbol='circle', symbol_size=8, # 设置标记点样式itemstyle_opts=opts.ItemStyleOpts(color='#C1232B'), # 设置线条颜色markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_="average", name="商家A平均值")] # 平均值标线)).add_yaxis('商家B', df.loc['商家B'].tolist(), # 添加商家B的数据label_opts=opts.LabelOpts(is_show=True, position='top', color='#2F4554'), # 标签设置symbol='diamond', symbol_size=8, # 设置标记点样式itemstyle_opts=opts.ItemStyleOpts(color='#2F4554'), # 设置线条颜色markline_opts=opts.MarkLineOpts(data=[opts.MarkLineItem(type_="average", name="商家B平均值")] # 平均值标线)).set_global_opts(title_opts=opts.TitleOpts(title='商家A和商家B销售折线图', subtitle='各类商品的销售数据'),xaxis_opts=opts.AxisOpts(name='商品类型',name_location='center',name_gap=30,axislabel_opts=opts.LabelOpts(font_size=12, rotate=45) # 设置X轴标签字体和旋转角度),yaxis_opts=opts.AxisOpts(name='销售量',name_location='center',name_gap=40,axislabel_opts=opts.LabelOpts(font_size=12)),tooltip_opts=opts.TooltipOpts(trigger="axis"), # 设置为触发器为 "axis"legend_opts=opts.LegendOpts(pos_top="10%",pos_left="center",textstyle_opts=opts.TextStyleOpts(font_size=14)),toolbox_opts=opts.ToolboxOpts(is_show=True, orient="vertical", pos_left="right", pos_top="center") # 工具栏).set_series_opts(label_opts=opts.LabelOpts(is_show=True, position="top"), # 显示数据标签,位置在上方linestyle_opts=opts.LineStyleOpts(width=3, type_='solid') # 设置折线的样式) )# 渲染图表到HTML文件 line.render('第三题.html')
第四题
利用pyecharts绘制成绩的箱线图,数据:语文考试成绩.xlsx,要求:努力美化所画的箱线图,可以参照第一个任务的方法。
班级 成绩 1班 68 99 46 77 94 40 79 20 88 89 76 92 95 2班 79 88 35 57 78 69 78 99 75 46 88 87 89 3班 91 82 63 86 77 78 32 96 80 86 64 67 96 4班 72 82 45 100 67 89 90 90 89 69 79 91 92 import pandas as pd from pyecharts.charts import Boxplot from pyecharts import options as opts from pyecharts.globals import ThemeType# 读取Excel文件中的数据,假设第一列是“班级” df = pd.read_excel('语文考试成绩.xlsx', index_col=0)# 确保“班级”列存在,并将其设置为索引(如果它不是索引的话) # 但在这个例子中,我们不需要将“班级”设置为索引,因为我们将直接使用它 # 如果“班级”列不是第一列,您可能需要通过列名来引用它,例如 df['班级']# 提取班级和成绩数据 # 我们将使用groupby来按班级聚合成绩 boxplot_data = [] for class_name in df.index:scores = df.loc[class_name, df.columns[1:]] # 选择除了第一列(班级名)之外的所有列scores_list = scores.tolist() # 将Pandas Series转换为列表boxplot_data.append(scores_list) # 将这个列表添加到总列表中categories = df.index.tolist() # 班级名称作为类别# 创建箱线图 # 绘制箱线图 boxplot = (Boxplot().add_xaxis(categories) # 设置x轴为班级名称.add_yaxis("语文成绩", # 系列名称boxplot_data,).set_global_opts(title_opts=opts.TitleOpts(title="各班级语文考试成绩箱线图"),xaxis_opts=opts.AxisOpts(name="班级"),yaxis_opts=opts.AxisOpts(name="成绩"),toolbox_opts=opts.ToolboxOpts(), # 添加工具箱legend_opts=opts.LegendOpts(is_show=True, pos_left="left") # 图例显示在左侧) )# 渲染图表 boxplot.render('第四题.html')
第五题
利用pyecharts绘制有关运动员的最大携氧能力、体重和运动后心率三者关系的3D散点图,数据:运动员的最大携氧能力、体重和运动后心率数据.xlsx,要求:努力美化所画的3D散点图,可以参照第一个任务的方法。
import pandas as pd from pyecharts import options as opts from pyecharts.charts import Scatter3D# 读取CSV文件 file_path = '运动员的最大携氧能力、体重和运动后心率数据.csv' df = pd.read_csv(file_path)# 将DataFrame转换为列表,准备绘图 data = df.values.tolist()# 创建3D散点图 scatter3d = (Scatter3D().add(series_name="运动员数据",data=data,xaxis3d_opts=opts.Axis3DOpts(name='最大携氧能力 (ml/min)', type_='value'),yaxis3d_opts=opts.Axis3DOpts(name='体重 (kg)', type_='value'),zaxis3d_opts=opts.Axis3DOpts(name='运动后心率 (次/分钟)', type_='value'),).set_global_opts(title_opts=opts.TitleOpts(title="运动员最大携氧能力、体重与运动后心率的关系"),visualmap_opts=opts.VisualMapOpts(max_=180,range_color=['#313695', '#4575b4', '#74add1', '#abd9e9', '#e0f3f8', '#ffffbf', '#fee090', '#fdae61','#f46d43', '#d73027'],),) )# 渲染图表 scatter3d.render('第五题.html')
第六题
利用pyecharts的饼图的绘制商家A的销售情况,数据:商家A和商家B的各类商品的销售数据.csv,要求:努力美化所画的饼图,可以参照第一个任务的方法。
#导入整个实验所需的包 import pandas as pd from pyecharts import options as opts from pyecharts.globals import ThemeType from pyecharts.charts import Pie#读取“商家A和商家B的各类商品的销售数据.xlsx”文件数据 data = pd.read_excel('商家A和商家B的各类商品的销售数据.xlsx',index_col='商家', engine="openpyxl") #设置了图表的初始选项,包括图表的宽度、高度以及主题(这里设置为亮色主题) init_opts = opts.InitOpts(width='1000px', height='450px', theme=ThemeType.LIGHT) #绘制两个商家的柱形图 pie = (Pie().add('', [list(z) for z in zip(data.columns.tolist(), data.loc['商家A'].tolist())]).set_global_opts(title_opts=opts.TitleOpts(title='商家A销售情况饼图')).set_series_opts(label_opts=opts.LabelOpts(formatter='{b}:{c} ({d}%)'))) pie.render_notebook() #渲染图表 pie.render('第六题.html')