Python繪制南丁格爾玫瑰圖:從入門到實戰

Python繪制南丁格爾玫瑰圖:從入門到實戰

在這里插入圖片描述

引言

南丁格爾玫瑰圖(Nightingale Rose Chart),也被稱為極區圖(Polar Area Chart),是一種獨特的數據可視化方式。這種圖表由弗洛倫斯·南丁格爾(Florence Nightingale)在克里米亞戰爭期間首創,用于展示不同月份的死亡人數。本文將詳細介紹如何使用Python創建南丁格爾玫瑰圖,從基礎概念到實際應用。

什么是南丁格爾玫瑰圖?

南丁格爾玫瑰圖是一種圓形圖表,它將數據以扇形的形式展示,每個扇形的半徑表示數值的大小。與普通的餅圖不同,南丁格爾玫瑰圖使用扇形的面積(而不是角度)來表示數值,這使得數據之間的差異更加明顯。

主要特點:

  1. 使用扇形的面積表示數值
  2. 所有扇形的角度相等
  3. 通過半徑的變化來展示數據差異
  4. 適合展示周期性數據

環境準備

在開始之前,我們需要安裝必要的Python庫:

pip install matplotlib numpy

代碼實現

讓我們通過一個實際的例子來學習如何創建南丁格爾玫瑰圖。我們將使用matplotlib來實現這個可視化效果,這是一個功能強大且廣泛使用的數據可視化庫。

1. 基礎設置

首先,我們需要導入必要的庫并設置中文字體支持:

import matplotlib.pyplot as plt
import numpy as np
import matplotlib as mpl# 設置中文字體
plt.rcParams['font.sans-serif'] = ['SimHei', 'Microsoft YaHei', 'SimSun', 'Arial Unicode MS']  # 優先使用的中文字體
plt.rcParams['axes.unicode_minus'] = False  # 解決負號顯示問題
plt.rcParams['font.family'] = 'sans-serif'  # 使用無襯線字體

2. 準備數據

在我們的示例中,我們使用月度銷售數據來展示南丁格爾玫瑰圖的效果:

# 示例數據:不同月份的銷售數據
months = ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月']
values = [120, 150, 180, 200, 250, 300, 280, 260, 220, 190, 160, 140]

3. 創建極坐標圖

使用matplotlib的極坐標系統來創建玫瑰圖:

# 計算每個扇形的角度(均分360度)
angles = np.linspace(0, 2*np.pi, len(months), endpoint=False)# 創建圖形
fig, ax = plt.subplots(figsize=(10, 8), subplot_kw=dict(projection='polar'))# 繪制玫瑰圖
bars = ax.bar(angles, values, width=2*np.pi/len(months), bottom=0, alpha=0.8)

4. 設置樣式

為了讓圖表更加美觀,我們添加顏色、標簽和圖例:

# 設置顏色
colors = plt.cm.viridis(np.linspace(0, 1, len(months)))
for bar, color in zip(bars, colors):bar.set_facecolor(color)# 設置標簽
ax.set_xticks(angles)
ax.set_xticklabels(months, fontsize=10)# 添加標題和圖例
plt.title('月度銷售數據 - 南丁格爾玫瑰圖', pad=20, fontsize=14)
plt.legend(bars, months, loc='upper right', bbox_to_anchor=(1.3, 1.1), fontsize=10)

實際應用場景

南丁格爾玫瑰圖在以下場景特別有用:

  1. 時間序列數據:展示月度、季度或年度數據的變化
  2. 周期性數據:展示具有周期性特征的數據
  3. 對比分析:比較不同類別之間的數值差異
  4. 趨勢展示:展示數據隨時間的變化趨勢

進階技巧

1. 自定義顏色方案

可以通過修改顏色映射來創建不同的顏色方案:

# 使用不同的顏色映射
colors = plt.cm.plasma(np.linspace(0, 1, len(months)))  # 使用plasma顏色映射

2. 添加數據標簽

可以在每個扇形上添加具體數值:

# 添加數值標簽
for angle, value in zip(angles, values):ax.text(angle, value, str(value), ha='center', va='bottom')

3. 調整圖表樣式

可以通過修改各種參數來優化圖表外觀:

# 調整圖表樣式
plt.rcParams['font.sans-serif'] = ['SimHei', 'Microsoft YaHei', 'SimSun', 'Arial Unicode MS']
plt.rcParams['axes.unicode_minus'] = False
plt.rcParams['font.family'] = 'sans-serif'

注意事項

  1. 數據量不宜過多,建議控制在12個以內
  2. 確保數據之間的差異足夠明顯
  3. 選擇合適的顏色方案,避免使用過于相似的顏色
  4. 添加適當的圖例和標簽
  5. 注意中文字體的顯示問題,確保系統安裝了所需的中文字體

總結

南丁格爾玫瑰圖是一種強大的數據可視化工具,特別適合展示周期性數據和進行對比分析。通過Python和matplotlib,我們可以輕松創建美觀且功能豐富的南丁格爾玫瑰圖。在實際應用中,要根據具體需求選擇合適的展示方式,并注意數據的可讀性和美觀性。

完整代碼

完整的代碼實現如下:

import matplotlib.pyplot as plt
import numpy as np
import matplotlib as mpl# 設置中文字體
plt.rcParams['font.sans-serif'] = ['SimHei', 'Microsoft YaHei', 'SimSun', 'Arial Unicode MS']  # 優先使用的中文字體
plt.rcParams['axes.unicode_minus'] = False  # 解決負號顯示問題
plt.rcParams['font.family'] = 'sans-serif'  # 使用無襯線字體def create_nightingale_rose():# 示例數據:不同月份的銷售數據months = ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月']values = [120, 150, 180, 200, 250, 300, 280, 260, 220, 190, 160, 140]# 計算每個扇形的角度(均分360度)angles = np.linspace(0, 2*np.pi, len(months), endpoint=False)# 創建圖形fig, ax = plt.subplots(figsize=(10, 8), subplot_kw=dict(projection='polar'))# 繪制玫瑰圖bars = ax.bar(angles, values, width=2*np.pi/len(months), bottom=0, alpha=0.8)# 設置顏色colors = plt.cm.viridis(np.linspace(0, 1, len(months)))for bar, color in zip(bars, colors):bar.set_facecolor(color)# 設置標簽ax.set_xticks(angles)ax.set_xticklabels(months, fontsize=10)# 添加標題plt.title('月度銷售數據 - 南丁格爾玫瑰圖', pad=20, fontsize=14)# 添加圖例plt.legend(bars, months, loc='upper right', bbox_to_anchor=(1.3, 1.1), fontsize=10)# 顯示圖形plt.tight_layout()plt.show()if __name__ == '__main__':create_nightingale_rose()

參考資料

  1. Matplotlib官方文檔
  2. 數據可視化最佳實踐指南
  3. 南丁格爾玫瑰圖的歷史與應用

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

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

相關文章

計算機操作系統概要

不謀萬世者,不?謀?時。不謀全局者 ,足謀?域 。 ——陳澹然《寤?》《遷都建藩議》 操作系統 一.對文件簡單操作的常用基礎指令 ls ls 選項 目錄或?件名:羅列當前?錄下的?件 -l:以長格式顯示?件和?錄的詳細信息 -a 或 --all&…

<PLC><視覺><機器人>基于海康威視視覺檢測和UR機械臂,如何實現N點標定?

前言 本系列是關于PLC相關的博文,包括PLC編程、PLC與上位機通訊、PLC與下位驅動、儀器儀表等通訊、PLC指令解析等相關內容。 PLC品牌包括但不限于西門子、三菱等國外品牌,匯川、信捷等國內品牌。 除了PLC為主要內容外,相關設備如觸摸屏(HMI)、交換機等工控產品,如果有…

從專家編碼到神經網絡學習:DTM 的符號操作新范式

1st author: Paul Soulos paper: Differentiable Tree Operations Promote Compositional Generalization ICML 2023 code: psoulos/dtm: Differentiable Tree Machine 1. 問題與思路 現代深度學習在連續向量空間中取得了巨大成功,然而在處理具有顯式結構&#x…

微信小程序第三方代開發模式技術調研與實踐總結

?? 微信小程序第三方代開發模式技術調研與實踐總結 ?? 前言 隨著企業對私有化品牌運營訴求的增加,許多大型客戶希望將原本由 SaaS 平臺統一提供的小程序遷移至自有主體(AppID)下運行,同時又希望繼續沿用 SaaS 平臺的業務服務與數據托管方式。微信開放平臺提供的“小程…

開啟智能未來:DeepSeek賦能行業變革之路

前言 在人工智能重構生產關系的2025年,DeepSeek以其革命性的推理能力和Python生態的技術延展性,正在重塑內容創作與數據智能的邊界。本書以"工具迭代思維升維"為雙輪驅動,構建從認知突破到商業落地的完整知識圖譜。 DeepSeek的崛…

常見三維引擎坐標軸 webgl threejs cesium blender unity ue 左手坐標系、右手坐標系、坐標軸方向

平臺 / 引擎坐標系類型Up(上)方向Forward(前進)方向前進方向依據說明Unity左手坐標系YZtransform.forward 是 Z 軸正方向,默認攝像機朝 Z 看。Unreal Engine左手坐標系ZXUE 的角色面朝 X,默認使用 GetActor…

Cold Diffusion: Inverting Arbitrary Image Transforms Without Noise論文閱讀

冷擴散:無需噪聲的任意圖像變換反轉 摘要 標準擴散模型通常涉及兩個核心步驟:圖像降質 (添加高斯噪聲)和圖像恢復 (去噪操作)。本文發現,擴散模型的生成能力并不強烈依賴于噪聲的選擇&#xf…

Java并發編程核心組件簡單了解

一、Lock體系 1. ReentrantLock(可重入鎖) Lock lock new ReentrantLock(); lock.lock(); try {// 臨界區代碼 } finally {lock.unlock(); }特點:可重入、支持公平/非公平策略優勢:可中斷鎖獲取、定時鎖等待使用場景&#xff1…

第二個五年計劃!

下一階段!5年后!33歲!體重維持在125斤內!腰圍74! 健康目標: 體檢指標正常,結節保持較小甚至變小! 工作目標: 每年至少在一次考評里拿A(最高S,A我理…

Redis(三) - 使用Java操作Redis詳解

文章目錄 前言一、創建項目二、導入依賴三、鍵操作四、字符串操作五、列表操作六、集合操作七、哈希表操作八、有序集合操作九、完整代碼1. 完整代碼2. 項目下載 前言 本文主要介紹如何使用 Java 操作 Redis 數據庫,涵蓋項目創建、依賴導入及 Redis 各數據類型&…

【Folium】使用離線地圖

文章目錄 相關文獻離線地圖下載Folium 使用離線地圖 相關文獻 Folium — Folium 0.19.5 documentationOffline Map Maker 離線地圖下載 我們使用 Offline Map Maker 進行地圖下載。 特別注意:Folium 默認支持 WGS84 坐標系,建議下載 WGS84 坐標系的地…

DeepSearch:字節新一代 DeerFlow 框架

項目地址:https://github.com/bytedance/deer-flow/ 【全新的 Multi-Agent 架構設計】獨家設計的 Research Team 機制,支持多輪對話、多輪決策和多輪任務執行。與 LangChain 原版 Supervisor 相比,顯著減少 Tokens 消耗和 API 調用次數&#…

Qt—用SQLite實現簡單的注冊登錄界面

1.實現目標 本次實現通過SQLite制作一個簡易的登錄窗口,當點擊注冊按鈕時,登錄窗口會消失,會出現一個新的注冊界面;完成注冊或退出注冊時,注冊窗口會消失,重新出現登錄窗口。注冊過的用戶信息會出現在SQLi…

day 18:零基礎學嵌入式之數據結構——

一、基礎內容 1.數據結構:相互之間存在一種或多種特定關系的數據元素的集合。 2.邏輯結構 (1)集合,所有數據在同一個集合中,關系平等。 (2)線性,數據和數據之間是一對一的關系 &am…

【SSL證書系列】客戶端如何驗證https網站服務器發的證書是否由受信任的根證書簽發機構簽發

客戶端驗證HTTPS網站證書是否由受信任的根證書頒發機構(CA)簽發,是一個多步驟的過程,涉及證書鏈驗證、信任錨(Trust Anchor)檢查、域名匹配和吊銷狀態驗證等。以下是詳細的驗證流程: 1. 證書鏈的…

iOS即時通信的技術要點

iOS即時通信開發的關鍵技術要點總結: 一、通訊協議選擇 Socket通信 基礎實現:使用原生BSD Socket或CFNetwork框架(復雜),推薦第三方庫如CocoaAsyncSocket(封裝GCDAsyncSocket),簡化T…

智能AI構建工地安全網:跌倒、抽搐、區域入侵多場景覆蓋

智能AI在工地安全中的應用:從監測到救援的全流程實踐 一、背景:高溫作業下的工地安全挑戰 隨著夏季高溫持續,工地戶外作業環境面臨嚴峻考驗。工人因高溫疲勞、脫水或突發疾病引發的行為異常(如暈厥、抽搐、跌倒)頻發…

Doris

Apache Doris(原名:Palo)是一個高性能、實時的MPP分析型數據庫,非常適合海量數據的即席查詢、報表分析、指標統計等 OLAP 場景。Doris 的設計目標是:極致查詢性能、簡單易用、支持高并發分析和明細查詢。 一、Doris 核…

# 2-STM32F103-復位和時鐘控制RCC

STM32-復位和時鐘控制RCC 2-STM32-復位和時鐘控制RCC摘要說明本文參考資料如下: 一、STM32最小系統回顧STM32F103C8T6核心板原理圖 二、復位三、時鐘3.1 時鐘樹3.2 STM32啟動過程3.2 SystemInit()函數3.2.1 SystemInit()第1句:3.2.2 SystemInit()第2句&a…

rk3576 gstreamer opencv

安裝gstreamer rk3588使用gstreamer推流_rk3588 gstreamer-CSDN博客 rk3588使用gstreamer推流_rk3588 gstreamer-CSDN博客 Installing on Linux sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-pl…