一,实验目的

1.掌握时间数据在大数据中的应用
2.掌握时间数据可视化图表表示
3. 利用Python程序实现堆叠柱形图、折线图和堆积面积图可视化

二,实验原理

离散型数据的堆叠柱形图,堆叠柱形图的几何形状和常规柱形图
很相似,在柱形图中,数据值为并行排列,而在堆叠柱图则是一个个叠加起来的。它的特点就是如果数据存在子分类,并且这些子分类相加有意义的话,此时就可以使用堆叠柱形图来表示。本次实验结合本章讲述的堆叠柱形图的列子,这里我们要画的是极坐标系-堆叠柱状图,也是南丁格尔玫瑰图。由于半径和面积的关系是平方的关系,南丁格尔玫瑰图会将数据的比例大小夸大,尤适合对比大小相近的数值;由于圆形有周期的特性,所以玫瑰图也适用于表示一个周期内的时间概念,比如星期、月份。

三,实验环境

OS:Windows
Python:v3.11

四,实验步骤

1,绘制极坐标堆叠柱状图

下载数据源(http://datasets.flowingdata.com/hot-dog-places.csv)历年热狗大胃王比赛的前三名的成绩。如图所示:

1.2编写程序

打开pycharm,运行如下程序,先绘制以时间为半径的极坐标堆叠柱状图,程序如下:

from pyecharts.charts import Polar, Page
from pyecharts import options as opts
import os

# 创建 Page 对象
page = Page()

# CSV 文件路径
filename = r"hot-dog-places.csv"

# 手动读取CSV文件
datax = []
with open(filename, encoding='utf-8') as f:  # 添加编码参数
    for line in f:
        row = [x.strip() for x in line.strip().split(',') if x.strip()]
        if row:  # 跳过空行
            datax.append(row)

# 提取数据
radius = datax[0][1:]  # 假设第一行为时间
y1 = [float(i) for i in datax[1][1:]]  # 第二行数据
y2 = [float(i) for i in datax[2][1:]]  # 第三行数据
y3 = [float(i) for i in datax[3][1:]]  # 第四行数据

# 第一个极坐标图(半径表示时间)
polar1 = Polar(init_opts=opts.InitOpts(width="600px", height="600px"))
polar1.set_global_opts(
    title_opts=opts.TitleOpts(title="极坐标系-堆叠柱状图1"),
    legend_opts=opts.LegendOpts(pos_top="5%")
)
polar1.add_schema(
    radiusaxis_opts=opts.RadiusAxisOpts(
        data=radius,
        type_="category",
        boundary_gap=False
    ),
    angleaxis_opts=opts.AngleAxisOpts(
        is_clockwise=True,
        max_=360,
        start_angle=90
    )
)
polar1.add("A", y1, type_="bar", stack="stack1")
polar1.add("B", y2, type_="bar", stack="stack1")
polar1.add("C", y3, type_="bar", stack="stack1")


# 添加图表并渲染
page.add(polar1)


# 确保输出文件存在
output_path = "polar_charts.html"
page.render(output_path)

# 自动用默认浏览器打开
os.system(f"start {output_path}")  # Windows

结果如下

2,堆积面积图

2.1作用
(1)展示部分与整体关系 :堆积面积图可以直观地显示不同类别在时间序列上的累计总量。每个类别用不同颜色的区域表示,这些区域叠加在一起形成一个整体。例如,在分析某公司的产品销售情况时,横轴是时间(如月份),纵轴是销售额。不同产品的销售额用不同颜色堆积起来,可以清晰地看到每个月各个产品的销售额贡献以及公司整体的销售趋势。
(2)比较类别占比变化 :通过观察不同颜色区域在整体中的占比随时间的变化,能够了解各类别在整体中的相对重要性是如何演变的。比如在市场调研中,分析不同品牌在市场中的占有率随时间的变化情况,堆积面积图可以很好地展示各品牌从推出到市场份额逐渐上升或下降的过程。

2.2绘制

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# 读取 CSV 文件
df = pd.read_csv("hot-dog-places.csv", index_col=0)  # 假设第一列是年份索引

# 1. 堆积面积图(Stacked Area Chart)
def plot_stacked_area(df):
    plt.figure(figsize=(10, 5))
    df.T.plot.area(alpha=0.6)
    plt.title("Stacked Area Chart")
    plt.xlabel("Year")
    plt.ylabel("Value")
    plt.legend(title="Categories")
    plt.show()

结果如下

3折线图

3.1作用

(1)展示趋势 :折线图是最常用的时间序列数据可视化工具之一。它通过连接数据点来展示数据随时间的变化趋势。例如,绘制某地区一年内每个月的平均气温变化,横轴是月份,纵轴是气温值,折线图可以清晰地显示出气温的季节性变化规律,如气温在夏季达到高峰,在冬季降至低谷。
(3)比较多个数据序列 :可以同时绘制多条折线来比较不同数据序列的变化趋势。比如,比较不同城市的房价变化趋势,每条折线代表一个城市的房价随时间的波动,这样可以直观地看出哪个城市的房价增长更快,哪个城市的房价相对稳定等。
(3)识别周期性和异常值 :在时间序列数据中,折线图有助于发现数据的周期性模式,如经济数据中的商业周期。同时,也能很容易地发现异常值,例如在某个月份的销售额突然大幅下降,通过折线图可以快速定位到这个异常点并进一步分析其原因。

3.2绘制

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

# 创建 DataFrame(数据按照你的格式)
data = {
    2000: [25, 24, 22],
    2001: [50, 31, 23.5],
    2002: [50.5, 26, 25.5],
    2003: [44.5, 30.5, 29.5],
    2004: [53.5, 38, 32],
    2005: [49, 37, 32],
    2006: [54, 52, 37],
    2007: [66, 63, 49],
    2008: [59, 59, 42],
    2009: [68, 64.5, 55],
    2010: [54, 43, 37]
}
def plot_line_chart(df):
    plt.figure(figsize=(10, 5))
    df.T.plot(marker="o", linestyle="-")
    plt.title("Line Chart")
    plt.xlabel("Year")
    plt.ylabel("Value")
    plt.legend(title="Categories")
    plt.show()

结果如图:

五总结:

在实验中,我利用Python编程实现了堆叠柱形图、折线图和堆积面积图的可视化,通过Matplotlib和Seaborn等库,成功展示了时间数据的动态变化和类别分布特征。堆叠柱形图用于比较不同类别在时间上的占比变化,折线图用于展示数据的整体趋势,而堆积面积图则强调了部分与整体的关系。实验结果表明,这些图表能够有效帮助理解时间数据的规律和特征。

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐