【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.pswp.cn/web/73809.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/73809.shtml
英文地址,請注明出處:http://en.pswp.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. 問題分析 這個錯誤說明服務器在啟動時沒…