【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.mzph.cn/web/73809.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习4.4笔记

《动手学深度学习》-4.4-笔记 验证数据集:通常是从训练集中划分出来的一部分数据,不要和训练数据混在一起,评估模型好坏的数据集 测试数据集:只用一次的数据集 k-折交叉验证(k-Fold Cross-Validation)是…

vue 两种路由模式

一、两种模式比较 在vue.js中,路由模式分为两种:hash 模式和 history 模式。这两种模式决定了URL的结构和浏览器历史记录的管理方式。 1. hash 模式带 #,#后面的地址变化不会引起页面的刷新。换句话说,hash模式不会将#后面的地址…

Android生态大变革,谷歌调整开源政策,核心开发不再公开

“开源”这个词曾经是Android的护城河,如今却成了谷歌的烫手山芋。最近谷歌宣布调整Android的开源政策,核心开发将全面转向私有分支。翻译成人话就是:以后Android的核心更新,不再公开共享了。 这操作不就是开源变节吗,…

JavaScript中集合常用操作方法详解

JavaScript中集合常用操作方法详解 JavaScript中的集合主要包括数组(Array)、集合(Set)和映射(Map)。下面我将详细介绍这些集合类型的常用操作方法。 数组(Array) 数组是JavaScript中最常用的集合类型,提供了丰富的操作方法。 创建数组 // 字面量创建 const ar…

【HC-05】蓝牙串口通信模块调试与应用(1)

一、HC-05 基础学习视频 HC-05蓝牙串口通信模块调试与应用1 二、HC-05学习视频课件

【学Rust写CAD】18 定点数2D仿射变换矩阵结构体(MatrixFixedPoint结构别名)

源码 // matrix/fixed.rs use crate::fixed::Fixed; use super::generic::Matrix;/// 定点数矩阵类型别名 pub type MatrixFixedPoint Matrix<Fixed, Fixed, Fixed, Fixed, Fixed, Fixed>;代码解析 这段代码定义了一个定点数矩阵的类型别名 MatrixFixedPoint&#xff…

axios文件下载使用后端传递的名称

java后端通过HttpServletResponse 返回文件流 在Content-Disposition中插入文件名 一定要设置Access-Control-Expose-Headers&#xff0c;代表跨域该Content-Disposition返回Header可读&#xff0c;如果没有&#xff0c;前端是取不到Content-Disposition的&#xff0c;可以在统…

HarmonyOS之深入解析如何根据url下载pdf文件并且在本地显示和预览

一、文件下载 ① 网络请求配置 下载在线文件&#xff0c;需要访问网络&#xff0c;因此需要在 config.json 中添加网络权限&#xff1a; {"module": {"requestPermissions": [{"name": "ohos.permission.INTERNET","reason&qu…

鸿蒙前后端项目源码-点餐v3.0-原创!原创!原创!

鸿蒙前后端点餐项目源码含文档ArkTS语言. 原创作品.我半个月写的原创作品&#xff0c;请尊重原创。 原创作品&#xff0c;盗版必究&#xff01;&#xff01;&#xff01;&#xff01; 原创作品&#xff0c;盗版必究&#xff01;&#xff01;&#xff01;&#xff01; 原创作…

VUE3+TypeScript项目,使用html2Canvas+jspdf生成PDF并实现--分页--页眉--页尾

使用html2CanvasJsPDF生成pdf&#xff0c;并实现分页添加页眉页尾 1.封装方法htmlToPdfPage.ts /**path: src/utils/htmlToPdfPage.tsname: 导出页面为PDF格式 并添加页眉页尾 **/ /*** 封装思路* 1.将页面根据A4大小分隔边距&#xff0c;避免内容被中间截断* 所有元素层级不要…

5.Excel:从网上获取数据

一 用 Excel 数据选项卡获取数据的方法 连接。 二 要求获取实时数据 每1分钟自动更新数据。 A股市场_同花顺行情中心_同花顺财经网 用上面方法将数据加载进工作表中。 在表格内任意区域右键&#xff0c;刷新。 自动刷新&#xff1a; 三 缺点 Excel 只能爬取网页上表格类型的…

《深度剖析SQL之WHERE子句:数据过滤的艺术》

在当今数据驱动的时代&#xff0c;数据处理和分析能力已成为职场中至关重要的技能。SQL作为一种强大的结构化查询语言&#xff0c;在数据管理和分析领域占据着核心地位。而WHERE子句&#xff0c;作为SQL中用于数据过滤的关键组件&#xff0c;就像是一把精准的手术刀&#xff0c…

华为eNSP-配置静态路由与静态路由备份

一、静态路由介绍 静态路由是指用户或网络管理员手工配置的路由信息。当网络拓扑结构或者链路状态发生改变时&#xff0c;需要网络管理人员手工修改静态路由信息。相比于动态路由协议&#xff0c;静态路由无需频繁地交换各自的路由表&#xff0c;配置简单&#xff0c;比较适合…

Docker 快速入门指南

Docker 快速入门指南 1. Docker 常用指令 Docker 是一个轻量级的容器化平台&#xff0c;可以帮助开发者快速构建、测试和部署应用程序。以下是一些常用的 Docker 命令。 1.1 镜像管理 # 搜索镜像 docker search <image_name># 拉取镜像 docker pull <image_name>…

基础认证-单选题(一)

单选题 1、下列关于request方法和requestlnStream方法说法错误的是(C) A 都支持取消订阅响应事件 B 都支持订阅HTTP响应头事件 C 都支持HttpResponse返回值类型 D 都支持传入URL地址和相关配置项 2、如需修改Text组件文本的透明度可通过以下哪个属性方法进行修改 (C) A dec…

Logback使用和常用配置

Logback 是 Spring Boot 默认集成的日志框架&#xff0c;相比 Log4j&#xff0c;它性能更高、配置更灵活&#xff0c;并且天然支持 Spring Profile 多环境配置。以下是详细配置步骤及常用配置示例。 一、添加依赖&#xff08;非 Spring Boot 项目&#xff09; 若项目未使用 Sp…

MySQL基础语法DDLDML

目录 #1.创建和删除数据库 ​#2.如果有lyt就删除,没有则创建一个新的lyt #3.切换到lyt数据库下 #4.创建数据表并设置列及其属性,name是关键词要用name包围 ​编辑 #5.删除数据表 #5.查看创建的student表 #6.向student表中添加数据,数据要与列名一一对应 #7.查询studen…

在windows下安装windows+Ubuntu16.04双系统(下)

这篇文章的内容主要来源于这篇文章&#xff0c;为正式安装windowsUbuntu16.04双系统部分。在正式安装前&#xff0c;若还没有进行前期准备工作&#xff08;1.分区2.制作启动u盘&#xff09;&#xff0c;见《在windows下安装windowsUbuntu16.04双系统(上)》 二、正式安装Ubuntu …

Ubuntu24.04 离线安装 MySQL8.0.41

一、环境准备 1.1 官方下载MySQL8.0.41 完整包 1.2 上传包 & 解压 上传包名称是&#xff1a;mysql-server_8.0.41-1ubuntu24.04_amd64.deb-bundle.tar # 切换到上传目录 cd /home/MySQL8 # 解压&#xff1a; tar -xvf mysql-server_8.0.41-1ubuntu24.04_amd64.deb-bundl…

记录一次Dell服务器更换内存条报错解决过程No memory found

文章目录 问题问题分析解决流程总结 问题 今天给服务器添加了几个内存条&#xff0c;开启后报错 No memory found No useable DlMMs found. Verify the DlMMsare properly seated and that they are installed in the correct sockets. 问题分析 这个错误说明服务器在启动时没…