当前位置: 首页 > article >正文

【Python】天气数据可视化

1. Python进行数据可视化

在数据分析和科学计算领域,Python凭借其强大的库和简洁的语法,成为了众多开发者和科研人员的首选工具。数据可视化作为数据分析的重要环节,能够帮助我们更直观地理解数据背后的规律和趋势。本文将详细介绍如何使用Python中的matplotlibpandasnumpyseaborn库来绘制多种类型的图表,包括折线图、散点图、柱形图、饼图和热力图。

1.1 数据准备与导入

在开始绘制图表之前,我们首先需要准备数据。这里,我们使用pandas库来创建一个包含日期、风速、紫外线指数、温度和湿度的数据框(DataFrame)。

import pandas as pd
import numpy as np
# 创建日期范围
dates = pd.date_range('2025-03-01', periods=10)
# 创建数据字典
data = {
    'wind': np.random.randint(3, 10, size=10),
    'uv': np.random.randint(2, 12, size=10),
    'temperature': np.random.randint(20, 30, size=10),
    'humidity': np.random.randint(30, 80, size=10),
}
# 创建DataFrame
df = pd.DataFrame(data, index=dates)
1.2 折线图的绘制与美化

折线图是展示时间序列数据变化的常用图表。我们将使用matplotlib库来绘制折线图,并利用seaborn库来美化图表。

import matplotlib.pyplot as plt
import seaborn as sns
# 设置图表大小
plt.figure(figsize=(12, 6))
# 定义线条样式
styles = ['-', '--', '-.', ':']
# 绘制折线图
for i, column in enumerate(df.columns):
    plt.plot(df.index, df[column], marker='o', linestyle=styles[i % len(styles)], label=column)
# 设置图表标题和坐标轴标签
plt.xlabel('Date')
plt.ylabel('Value')
plt.title('Time Series Line Chart')
# 将图例放在图表外
plt.legend(loc='upper left', bbox_to_anchor=(1, 1))
# 显示网格
plt.grid(True)
# 调整布局
plt.tight_layout()
# 显示图表
plt.show()

在这里插入图片描述

1.3 散点图的绘制

散点图用于展示两个变量之间的关系。我们将绘制温度与湿度之间的散点图。

# 设置图表大小
plt.figure(figsize=(10, 6))
# 绘制散点图
sns.scatterplot(data=df, x='temperature', y='humidity')
# 设置图表标题
plt.title('Temperature vs Humidity Scatter Plot')
# 显示图表
plt.show()

在这里插入图片描述

1.4 柱形图的绘制

柱形图适用于展示不同类别的数据比较。我们将绘制一个柱形图来展示所有数据。

# 绘制柱形图
df.plot(kind='bar', figsize=(10, 6))
# 设置图表标题和坐标轴标签
plt.title('Data Bar Chart')
plt.ylabel('Value')
plt.xlabel('Date')
# 显示图表
plt.show()

在这里插入图片描述

1.5 饼图的绘制

饼图用于展示部分与整体的关系。我们将以最后一个数据点为例,绘制一个饼图。

# 获取最后一个数据点
last_data = df.iloc[-1]
# 设置图表大小
plt.figure(figsize=(7, 7))
# 绘制饼图
plt.pie(last_data, labels=last_data.index, autopct='%1.1f%%')
# 设置图表标题
plt.title('Data Pie Chart (Last Day)')
# 显示图表
plt.show()

在这里插入图片描述

1.6 热力图的绘制

热力图用于展示数据之间的相关性。我们将绘制一个热力图来展示数据框中各列之间的相关性。

# 设置图表大小
plt.figure(figsize=(10, 6))
# 绘制热力图
sns.heatmap(df.corr(), annot=True, cmap='coolwarm')
# 设置图表标题
plt.title('Data Correlation Heatmap')
# 显示图表
plt.show()

在这里插入图片描述

1.7 多子图的绘制

创建一个包含四个子图的图表,用于展示温度、湿度、风速和紫外线指数随时间的变化,可以更有效地比较不同数据集。

1.7.1 创建子图

fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(14, 10))

这行代码创建了一个包含四个子图的图表。nrows=2, ncols=2表示图表有2行2列,共4个子图。figsize=(14, 10)设置了整个图表的大小为14x10英寸。

1.7.2 第一个子图:温度折线图

axes[0, 0].plot(df.index, df['temperature'], marker='o')
axes[0, 0].set_title('Temperature over Time')
axes[0, 0].grid(True)
  • axes[0, 0].plot(df.index, df['temperature'], marker='o'):在第一个子图(位于第0行第0列)上绘制温度随时间变化的折线图。df.index是时间序列,df['temperature']是温度数据,marker='o'表示数据点用圆圈标记。
  • axes[0, 0].set_title('Temperature over Time'):设置子图的标题为“Temperature over Time”。
  • axes[0, 0].grid(True):在子图上显示网格。

1.7.3 第二个子图:湿度折线图

axes[0, 1].plot(df.index, df['humidity'], marker='x')
axes[0, 1].set_title('Humidity over Time')
axes[0, 1].grid(True)
  • 这部分代码与温度折线图类似,但在第二个子图(位于第0行第1列)上绘制湿度随时间变化的折线图。数据点用叉号标记。

1.7.4 第三个子图:风速柱形图

axes[1, 0].bar(df.index, df['wind'])
axes[1, 0].set_title('Wind Speed')
axes[1, 0].grid(True)
  • axes[1, 0].bar(df.index, df['wind']):在第三个子图(位于第1行第0列)上绘制风速的柱形图。df.index是时间序列,df['wind']是风速数据。
  • 其他代码行设置标题和显示网格。

1.7.5 第四个子图:紫外线指数柱形图

axes[1, 1].bar(df.index, df['uv'], color='orange')
axes[1, 1].set_title('UV Index')
axes[1, 1].grid(True)
  • 这部分代码与风速柱形图类似,但在第四个子图(位于第1行第1列)上绘制紫外线指数的柱形图。柱形图的颜色设置为橙色。

1.7.6 调整布局并显示图表

plt.tight_layout()
plt.show()
  • plt.tight_layout():自动调整子图参数,使之填充整个图表区域,同时避免标签重叠。
  • plt.show():显示图表。

注意Pandas DataFrame中包含temperature(温度)、humidity(湿度)、wind(风速)和uv(紫外线指数)列,以及一个时间序列索引。

# 多子图
fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(14, 10))

# 第一个子图:温度折线图
axes[0, 0].plot(df.index, df['temperature'], marker='o')
axes[0, 0].set_title('Temperature over Time')
axes[0, 0].grid(True)

# 第二个子图:湿度折线图
axes[0, 1].plot(df.index, df['humidity'], marker='x')
axes[0, 1].set_title('Humidity over Time')
axes[0, 1].grid(True)

# 第三个子图:风速柱形图
axes[1, 0].bar(df.index, df['wind'])
axes[1, 0].set_title('Wind Speed')
axes[1, 0].grid(True)

# 第四个子图:紫外线指数柱形图
axes[1, 1].bar(df.index, df['uv'], color='orange')
axes[1, 1].set_title('UV Index')
axes[1, 1].grid(True)

plt.tight_layout()
plt.show()

在这里插入图片描述

1.7 总结与展望

通过本文的介绍,我们学会了如何使用Python中的matplotlibpandasnumpyseaborn库来绘制多种类型的图表。这些图表在数据分析和科学计算领域中具有广泛的应用价值,能够帮助我们更直观地理解数据背后的规律和趋势。

在未来的学习和工作中,我们可以继续探索这些库的更多功能和特性,以绘制更复杂、更美观的图表。同时,也可以尝试将数据可视化与机器学习、深度学习等先进技术相结合,以实现更高级的数据分析和挖掘任务。

2. 参考文献

[1] Matplotlib官方文档:https://matplotlib.org/
[2] Pandas官方文档:https://pandas.pydata.org/
[3] Numpy官方文档:https://numpy.org/
[4] Seaborn官方文档:https://seaborn.pydata.org/

3. 附录

本文中所使用的完整代码如下:

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import seaborn as sns
# 创建数据
dates = pd.date_range('2023-01-01', periods=10)
data = {
    'wind': np.random.randint(3, 10, size=10),
    'uv': np.random.randint(2, 12, size=10),
    'temperature': np.random.randint(20, 30, size=10),
    'humidity': np.random.randint(30, 80, size=10),
}
df = pd.DataFrame(data, index=dates)

# 美化折线图
plt.figure(figsize=(12, 6))
styles = ['-', '--', '-.', ':']
for i, column in enumerate(df.columns):
    plt.plot(df.index, df[column], marker='o', linestyle=styles[i % len(styles)], label=column)
plt.xlabel('Date')
plt.ylabel('Value')
plt.title('Time Series Line Chart')
plt.legend(loc='upper left', bbox_to_anchor=(1, 1))
plt.grid(True)
plt.tight_layout()
plt.show()

# 散点图
plt.figure(figsize=(10, 6))
sns.scatterplot(data=df, x='temperature', y='humidity')
plt.title('Temperature vs Humidity Scatter Plot')
plt.show()

# 柱形图
df.plot(kind='bar', figsize=(10, 6))
plt.title('Data Bar Chart')
plt.ylabel('Value')
plt.xlabel('Date')
plt.show()

# 饼图(以最后一个数据点为例)
last_data = df.iloc[-1]
plt.figure(figsize=(7, 7))
plt.pie(last_data, labels=last_data.index, autopct='%1.1f%%')
plt.title('Data Pie Chart (Last Day)')
plt.show()

# 热力图
plt.figure(figsize=(10, 6))
sns.heatmap(df.corr(), annot=True, cmap='coolwarm')
plt.title('Data Correlation Heatmap')
plt.show()

# 多子图
fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(14, 10))

# 第一个子图:温度折线图
axes[0, 0].plot(df.index, df['temperature'], marker='o')
axes[0, 0].set_title('Temperature over Time')
axes[0, 0].grid(True)

# 第二个子图:湿度折线图
axes[0, 1].plot(df.index, df['humidity'], marker='x')
axes[0, 1].set_title('Humidity over Time')
axes[0, 1].grid(True)

# 第三个子图:风速柱形图
axes[1, 0].bar(df.index, df['wind'])
axes[1, 0].set_title('Wind Speed')
axes[1, 0].grid(True)

# 第四个子图:紫外线指数柱形图
axes[1, 1].bar(df.index, df['uv'], color='orange')
axes[1, 1].set_title('UV Index')
axes[1, 1].grid(True)

plt.tight_layout()
plt.show()

通过本文的介绍和示例,希望读者能够掌握使用Python进行数据可视化的基本方法和技巧,并在实际项目中加以应用。


http://www.kler.cn/a/612444.html

相关文章:

  • Hyperlane 似乎是一个轻量级、高性能的 Rust HTTP 服务器库
  • 弱电系统:从基础原理到家庭与小区网络部署
  • C语言 二维线性查表linearInterpolation 100行实现通用线性查表
  • 深入理解Golang标准库`testing/fstest`包的用法和技巧进行文件系统测试
  • linux之 内存管理(5)-CMA 连续内存管理器
  • 行业大数据实验报告 通过聚类算法实现睡眠健康群体的精准智能划分
  • 如何在 HTML 中使用<dialog>标签创建模态对话框,有哪些交互特性
  • Spring AOP:面向切面编程的探索之旅
  • PTA 1105-链表合并(C++)
  • SpringMVC实战——转发和重定向及实际场景
  • Dify实现自然语言生成SQL并执行
  • 高级数据结构01BST树
  • 如何使用VS中的Android Game Development Extension (AGDE) 来查看安卓 Logcat 日志
  • ‌JVM 内存模型(JDK8+)
  • 如何使用Python爬虫按关键字搜索1688商品?
  • 测谎仪策略思路
  • linux 安装open webui
  • 第二十章:类型属性的重载_《C++ Templates》notes
  • 【商城实战(80)】从0到1剖析:区块链如何重塑商城生态
  • Lisp语言的数据库交互