欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 焦点 > 《数据可视化技术》上机报告

《数据可视化技术》上机报告

2024/11/17 2:37:52 来源:https://blog.csdn.net/liyankang/article/details/143770976  浏览:    关键词:《数据可视化技术》上机报告

一、实验目的及要求

掌握pyecharts数据可视化环境搭建以及pyecharts交互式基础图形的绘制。

(1)掌握pyecharts中初始配置项,系列配置项,全局配置项的配置方法。

(2)掌握pyecharts中条形图的绘制方法。

(3)掌握pyecharts中散点图的绘制方法。

(4)掌握pyecharts中折线图的绘制方法。

(5)掌握pyecharts中箱线图的绘制方法。

(6)掌握pyecharts中3D散点图的绘制方法。

(7)掌握pyecharts中饼图的绘制方法。


第一题

利用pyecharts绘制商家A和商家B销售的条形图,数据:商家A和商家B的各类商品的销售数据.xlsx。要求:要有初始配置项,系列配置项和全局配置项的各种配置,包括:画布宽度,高度,主题风格,添加主标题,标签位置向右,条形图方向为横向,有动画效果,并添加平均值标记线。

商家衬衫毛衣领带裤子风衣高跟鞋袜子
商家A12056289812928107
商家B601401531451607054
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班68994677944079208889769295
2班79883557786978997546888789
3班91826386777832968086646796
4班728245100678990908969799192
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')

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com