西电-数据可视化-实验二-统计图可视化(pyecharts)

数据可视化-实验二-统计图可视化(pyecharts)

一、实验要求:
对daily-minimum-temperatures-in-me.csv中的数据进行处理
使用编程类可视化工具实现如下所示效果:
在这里插入图片描述
二、具体实现

1.进入pyecharts官网修改demo即可:
在这里插入图片描述本实验我们要做的就是读取文件中的数据并照着demo里所给的数据格式进行修改即可!
在这里插入图片描述

2.实验代码:

from pyecharts import options as opts
from pyecharts.charts import Bar3D
import pandas as pd
import datetime


# 设置3个列表存放3个轴的信息
years = []       # x轴
month_day = []   # y轴
temp = []        # z轴


def read_csv(filename):
    df = pd.read_csv(filename)
    # 遍历
    for _, data in df.iterrows():
        # 利用datetime库格式化并处理日期
        mydate = datetime.datetime.strptime(data[0], '%Y-%m-%d')
        # print(type(data[0]))
        years.append(mydate.year)
        # 数据必须格式化处理,否则排序时会出错!!!
        # 用0填充 向右调整 占2个字符
        month_day.append(str("{:0>2d}".format(mydate.month)) + "-" + str("{:0>2d}".format(mydate.day)))
        temp.append([mydate, data[1]])
    # print(years)
    # print(month_day)
    # print(temp)


def build_bar3D():
    global years
    global month_day
    # 列表去重->排序
    years = list(set(years))
    years.sort()
    month_day = list(set(month_day))
    month_day.sort()
    # 建立yaer和month_day和index的映射关系
    # 这一步是整个实验最重要的一步!
    years_2_idx = {
    
    elem: idx for idx, elem in enumerate(years)}
    month_day_2_idx = {
    
    elem: idx for idx, elem in enumerate(month_day)}
    # 建立数据集
    data = []
    for elem in temp:
        x = years_2_idx[elem[0].year]
        y = month_day_2_idx[str("{:0>2d}".format(elem[0].month)) + "-" + str("{:0>2d}".format(elem[0].day))]
        z = elem[1]
        data.append([x, y, z])
    (
        # 处理数据
        Bar3D()
        .add(
            series_name="",
            data=data,
            xaxis3d_opts=opts.Axis3DOpts(years, type_="category"),
            yaxis3d_opts=opts.Axis3DOpts(month_day, type_="category"),
            zaxis3d_opts=opts.Axis3DOpts(type_="value"),
            # 三维笛卡尔坐标系配置项
            grid3d_opts=opts.Grid3DOpts(
                width=100,
                height=100,
                depth=100,
                # 是否开启视角绕物体的自动旋转查看。
                is_rotate=True,
                # 物体自转的速度。单位为角度 / 秒,默认为10 ,也就是 36 秒转一圈。
                rotate_speed=10,
                # 旋转操作的灵敏度,值越大越灵敏。支持使用数组分别设置横向和纵向的旋转灵敏度。
                rotate_sensitivity=1,
            ),
            # 三维柱状图中三维图形的着色效果
            # color:只显示颜色,不受光照等其它因素的影响
            shading="color"
        )
        .set_global_opts(
            title_opts=opts.TitleOpts(
                title="Daily minimum temperatures in Melbourne, Australia, 1981-1990"),
            visualmap_opts=opts.VisualMapOpts(min_=0, max_=20),
        )
        .render("work_2.html")
    )


if __name__ == '__main__':
    file = "daily-minimum-temperatures-in-me.csv"
    # 1.读文件中的数据
    read_csv(file)
    # 2.数据可视化
    build_bar3D()

3.实验需要注意的两个细节:

(1)对日期必须进行格式化处理:
在这里插入图片描述用0填充,向右调整,占两个字符!!!否则最后的日期顺序会错乱!

(2)建立year和month_day在x轴和y轴上的映射关系(非常重要):
在这里插入图片描述三、实验结果
在这里插入图片描述

Guess you like

Origin blog.csdn.net/yyyyypppppzzzzz/article/details/121317034