一、实验目的及要求
掌握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 |
pythonfrom 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进行设置,最大值最小值要和数据匹配,标记点的过渡色设置。
pythonfrom 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,要求:努力美化所画的折线图,可以参照第一个任务的方法。
pythonfrom 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 |
pythonimport 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散点图,可以参照第一个任务的方法。
pythonimport 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,要求:努力美化所画的饼图,可以参照第一个任务的方法。
python#导入整个实验所需的包 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')