利用徑向條形圖探索華盛頓的徒步旅行

利用徑向條形圖探索華盛頓的徒步旅行

import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
import pandas as pdfrom matplotlib.cm import ScalarMappable
from matplotlib.lines import Line2D
from mpl_toolkits.axes_grid1.inset_locator import inset_axes
from textwrap import wrap

數據探索

以下數據如果有需要的同學可關注公眾號HsuHeinrich,回復【數據可視化】自動獲取~

data = pd.read_csv("https://raw.githubusercontent.com/HsuHeinrich/data-collection/master/graph/hike_data.txt", sep='\t')
data.head()

image-20240129174211858

華盛頓徒步旅行數據集:

name:徒步名稱

location:地理位置

length:路線的全程距離,通常會以英里或者公里作為單位

gain:爬升高度,即徒步路線起點至終點之間的海拔上升量(Elevation Gain)

highpoint:最高點

rating:徒步路線的評分,一般是由用戶或者專家進行評價

# 提取地區
data["region"] = data["location"].str.split("--", n=1, expand=True)[0]
data["region"] = data["region"].str.strip() # 提取英里
data["length_num"] = data["length"].str.split(" ", n=1, expand=True)[0].astype(float)# 計算每個區域的累積長度和平均爬升高度
summary_stats = data.groupby(["region"]).agg(sum_length = ("length_num", "sum"),mean_gain = ("gain", "mean")
).reset_index()
# 四舍五入取整
summary_stats["mean_gain"] = summary_stats["mean_gain"].round(0)# 計算每個區域數量
trackNrs = data.groupby("region").size().to_frame('n').reset_index()# 合并數據
summary_all = pd.merge(summary_stats, trackNrs, "left", on = "region")
summary_all.head()

image-20240129174243636

繪制基本的雷達圖

# 按sum_length排序,獲得排序后的bar
df_sorted = summary_all.sort_values("sum_length", ascending=False)# x取值
ANGLES = np.linspace(0.05, 2 * np.pi - 0.05, len(df_sorted), endpoint=False)# 長度
LENGTHS = df_sorted["sum_length"].values# 平均爬升高度
MEAN_GAIN = df_sorted["mean_gain"].values# 區域
REGION = df_sorted["region"].values# 每個區域數量
TRACKS_N = df_sorted["n"].values
GREY12 = "#1f1f1f"# 設置默認字體
plt.rcParams.update({"font.family": "Bell MT"})# 字體顏色
plt.rcParams["text.color"] = GREY12# Bell MT字體不支持minus,禁用
plt.rc("axes", unicode_minus=False)# 顏色
COLORS = ["#6C5B7B","#C06C84","#F67280","#F8B195"]# 顏色調色盤
cmap = mpl.colors.LinearSegmentedColormap.from_list("my color", COLORS, N=256)# 標準化(顏色)
norm = mpl.colors.Normalize(vmin=TRACKS_N.min(), vmax=TRACKS_N.max())# 標準化顏色并進行調色
COLORS = cmap(norm(TRACKS_N))
# 初始化布局(極坐標)
fig, ax = plt.subplots(figsize=(9, 12.6), subplot_kw={"projection": "polar"})# 背景色
fig.patch.set_facecolor("white")
ax.set_facecolor("white")ax.set_theta_offset(1.2 * np.pi / 2)
ax.set_ylim(-1500, 3500)# 添加bar表示累積長度
ax.bar(ANGLES, LENGTHS, color=COLORS, alpha=0.9, width=0.52, zorder=10)# 添加垂直虛線,作為參考線
ax.vlines(ANGLES, 0, 3000, color=GREY12, ls=(0, (4, 4)), zorder=11)# 添加點表示平均爬升高度
ax.scatter(ANGLES, MEAN_GAIN, s=60, color=GREY12, zorder=11)# 為區域添加文本標簽
# 一個單詞最多需要5個連續字母,但不打斷超過5個字母的單詞
REGION = ["\n".join(wrap(r, 5, break_long_words=False)) for r in REGION] # x軸設置
ax.set_xticks(ANGLES)
ax.set_xticklabels(REGION, size=12);

output_10_0

優化軸并添加注釋

# 刪除x軸(極坐標軸)網格線
ax.xaxis.grid(False)# 設置y刻度
ax.set_yticklabels([])
ax.set_yticks([0, 1000, 2000, 3000])# 去除邊框
ax.spines["start"].set_color("none")
ax.spines["polar"].set_color("none")# 調整x標簽內邊距
XTICKS = ax.xaxis.get_major_ticks()
for tick in XTICKS:tick.set_pad(10)# 添加y標簽注釋
PAD = 10
ax.text(-0.2 * np.pi / 2, 1000 + PAD, "1000", ha="center", size=12)
ax.text(-0.2 * np.pi / 2, 2000 + PAD, "2000", ha="center", size=12)
ax.text(-0.2 * np.pi / 2, 3000 + PAD, "3000", ha="center", size=12)# 添加文本解釋高度和點
ax.text(ANGLES[0], 3100, "Cummulative Length [FT]", rotation=21, ha="center", va="center", size=10, zorder=12)
ax.text(ANGLES[0]+ 0.012, 1300, "Mean Elevation Gain\n[FASL]", rotation=-69, ha="center", va="center", size=10, zorder=12)
fig

output_12_0

添加更多的信息

# 調整布局
fig.subplots_adjust(bottom=0.175)# 插入軸(用于構造顏色bar)
cbaxes = inset_axes(ax, width="100%", height="100%", loc="center",bbox_to_anchor=(0.325, 0.1, 0.35, 0.01),bbox_transform=fig.transFigure
) # 創建離散列表,并分配顏色
bounds = [0, 100, 150, 200, 250, 300]
norm = mpl.colors.BoundaryNorm(bounds, cmap.N)# 構造顏色bar
cb = fig.colorbar(ScalarMappable(norm=norm, cmap=cmap), cax=cbaxes, # 使用上面插入的軸orientation = "horizontal",ticks=[100, 150, 200, 250]
)# 刪除顏色bar的輪廓
cb.outline.set_visible(False)# 移除刻度線
cb.ax.xaxis.set_tick_params(size=0)# 設置圖例
cb.set_label("Amount of tracks", size=12, labelpad=-40)# 添加額外的信息
# 調整布局
fig.subplots_adjust(top=0.8)# 標題、副標題、說明信息
title = "\nHiking Locations in Washington"
subtitle = "\n".join(["This Visualisation shows the cummulative length of tracks,","the amount of tracks and the mean gain in elevation per location.\n","If you are an experienced hiker, you might want to go","to the North Cascades since there are a lot of tracks,","higher elevations and total length to overcome."
])
caption = "Data Visualisation by Tobias Stalder\ntobias-stalder.netlify.app\nSource: TidyX Crew (Ellis Hughes, Patrick Ward)\nLink to Data: github.com/rfordatascience/tidytuesday/blob/master/data/2020/2020-11-24/readme.md"# 添加上面的文本信息
fig.text(0.1, 0.93, title, fontsize=25, weight="bold", ha="left", va="baseline")
fig.text(0.1, 0.9, subtitle, fontsize=14, ha="left", va="top")
fig.text(0.5, 0.025, caption, fontsize=10, ha="center", va="baseline")fig

output_14_0

參考:Circular barplot with Matplotlib

共勉~

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/90900.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/90900.shtml
英文地址,請注明出處:http://en.pswp.cn/web/90900.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

火狐瀏覽器中國特供版關閉,如何下載 Firefox 國際版?如何備份數據?

火狐瀏覽器中國特供版關閉,如何下載 Firefox 國際版?如何備份數據?各位火狐老用戶注意了!7 月 27 日北京謀智火狐正式發布公告:2025 年 9 月 29 日 24:00 起,中國特供版賬戶服務將徹底關閉,所有…

C語言操作符詳解:從基礎到進階

在C語言中,操作符是構建表達式的基礎,掌握各類操作符的用法、優先級及特性,對寫出高效且正確的代碼至關重要。本文將系統梳理C語言操作符的核心知識點,包含實例代碼與詳細解析,助你徹底搞懂操作符。 1. 操作符的分類 C…

鴻蒙平臺運行Lua腳本

1. 目標 使用 rust 在移動端實現 Lua 腳本的運行。 2. 核心步驟 [Rust Host App]│├── [mLua VM] (通過 mlua 或 rlua 庫嵌入)│ ├── 獨立Lua狀態(隔離執行)│ ├── 受限標準庫(禁用危險函數)│ └── 內存/CPU限…

【Ubuntu】發展歷程

Ubuntu 是一個基于 Debian 的 Linux 發行版,由 Canonical 公司開發和維護。它以其易用性、穩定性和強大的社區支持而著稱。以下是 Ubuntu 從發布以來的主要版本和發展歷程:1. Ubuntu 4.10 "Warty Warthog" (2004)發布日期:2004年10…

k8s下springboot-admin 監控服務部署,客戶端接入

踩坑及解決以下問題 1、客戶端監控信息不顯示,需要暴露監控檢查接口路徑 2、服務端不顯示客戶端日志,需要啟用日志,并指定日志路徑 3、解決在k8s下,客戶端多實例注冊id相同,如2個實例只顯示一個 整體架構 springboot-admin 由服務端和客戶端組成 服務端負責 1、提供 We…

git刪除遠程分支和本地分支

1. git刪除遠程分支 git push origin --delete [branch_name]2. 刪除本地分支 2.1 git branch -d 會在刪除前檢查merge狀態(其與上游分支或者與head)。 git branch -d [branch_name] 2.2 git branch -D 直接刪除 git branch -D 是 git branch --delete…

Go 的時間包:理解單調時間與掛鐘時間

Go 的時間包:理解單調時間與掛鐘時間 📅 引言 Go 語言自版本 1.9 起在 time.Time 中同時支持 “掛鐘時間(wall?clock)” 和 “單調時間(monotonic clock)”,用于分別滿足時間戳與時間間隔測量…

Android啟動時間優化大全

1 修改Android mksh默認的列長度 不修改這個參數,adb shell后,輸入超過80個字符,就不能看到完整的命令行。external/mksh/src/sh.h EXTERN mksh_ari_t x_cols E_INIT(80); EXTERN mksh_ari_t x_lins E_INIT(24);2 Kernel優化 2.1 內核驅動模塊…

matplotlib.pyplot: 底層原理簡析與進階技巧

文章目錄 1 底層實現原理 1.1 核心架構 1.1 渲染流程 2 基礎用法 2.1 基本繪圖 2.2 多子圖系統 2.3 高階用法 2.3.1 自定義Artist對象 2.3.2 高級動畫技術 2.3.3 事件處理系統 2.3.4 混合渲染技術 3 性能優化技巧 4 擴展模塊 5 總結 5.1 底層原理關鍵點 5.2 進階技巧 1 底層實現…

深入理解現代前端開發中的 <script type=“module“> 與構建工具實踐

引言:模塊化開發的演進在早期的前端開發中,JavaScript 缺乏原生的模塊化支持,開發者不得不依賴 IIFE(立即調用函數表達式)或第三方庫(如 RequireJS)來實現代碼組織。隨著 ES6(ES2015…

yolo--qt可視化開發

qt5可能不支持我們的cuda版本,改用qt6 YOLO11QT6OpencvC訓練加載模型全過程講解_yolov11 模型轉換成opencv c模型-CSDN博客 下面是qt5版本的案例,和yolo及cuda有沖突 安裝qt 切換到虛擬環境,例如pyqt,conda activate pyqt pip …

SQL性能優化

show [session|global] status : 查看服務器狀態 show global status like Com_ : 查看各種語句的執行次數 開啟慢查詢: 在 MySQL 配置文件(/etc/my.cnf)配置: #開啟MySQL慢日志查詢開關 slow_query_log1 #設置慢日志的時間為2秒,SQL語句執…

ctfshow pwn40

目錄 1. 分析程序 2. 漏洞編寫 3. 漏洞驗證 1. 分析程序 首先檢查程序相關保護,發現程序為32位且只開啟了一個NX保護 checksec pwn 使用IDA進行逆向分析代碼,查看漏洞觸發點: 在main函數中,有一個ctfshow函數,這里…

SQL173 店鋪901國慶期間的7日動銷率和滯銷率

SQL173 店鋪901國慶期間的7日動銷率和滯銷率 SQL題解:店鋪動銷率與滯銷率計算 關鍵:只要當天任一店鋪有任何商品的銷量就輸出該天的結果,即使店鋪901當天的動銷率為0。 潛臺詞:?輸出邏輯與店鋪901的銷售情況無關,只取…

PytorchLightning最佳實踐基礎篇

PyTorch Lightning(簡稱 PL)是一個建立在 PyTorch 之上的高層框架,核心目標是剝離工程代碼與研究邏輯,讓研究者專注于模型設計和實驗思路,而非訓練循環、分布式配置、日志管理等重復性工程工作。本文從基礎到進階&…

Apache Flink 實時流處理性能優化實踐指南

Apache Flink 實時流處理性能優化實踐指南 隨著大數據和實時計算需求不斷增長,Apache Flink 已經成為主流的流處理引擎。然而,在生產環境中,高并發、大吞吐量和低延遲的業務場景對 Flink 作業的性能提出了更高要求。本文將從原理層面深入解析…

ubuntu上將TempMonitor加入開機自動運行的方法

1.新建一個TempMonitor.sh文件,內容如下:#!/bin/bashcd /fjrobot/ ./TempMonitor &2.執行以下命令chmod x TempMonitor chmod x TempMonitor.sh rm -rf /etc/rc2.d/S56TempMonitor rm -rf /etc/init.d/TempMonitor cp /fjrobot/TempMonitor.sh /etc/…

速賣通自養號測評技術解析:IP、瀏覽器與風控規避的實戰方案

一、速賣通的“春天”來了,賣家如何抓住機會?2025年的夏天,速賣通的風頭正勁。從沙特市場躍升為第二大電商平臺,到8月大促返傭力度升級,平臺對優質商家的扶持政策越來越清晰。但與此同時,競爭也愈發激烈——…

adb: CreateProcessW failed: 系統找不到指定的文件

具體錯誤 adb devices * daemon not running; starting now at tcp:5037 adb: CreateProcessW failed: 系統找不到指定的文件。 (2) * failed to start daemon adb.exe: failed to check server version: cannot connect to daemon 下載最新的platform-tools-windows 下載最新…

Centos安裝HAProxy搭建Mysql高可用集群負載均衡

接上文MYSQL高可用集群搭建–docker https://blog.csdn.net/weixin_43914685/article/details/149647589?spm1001.2014.3001.5501 連接到你搭建的 Percona XtraDB Cluster (PXC) 數據庫集群,實現高可用性和負載均衡,建議使用一個中間件來管理這些連接。…