利用径向条形图探索华盛顿的徒步旅行

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) 数据库集群,实现高可用性和负载均衡,建议使用一个中间件来管理这些连接。…