比較(二)利用python繪制雷達圖

比較(二)利用python繪制雷達圖

雷達圖(Radar Chart)簡介

1

雷達圖可以用來比較多個定量變量,也可以用于查看數據集中變量的得分高低,是顯示性能表現的理想之選。缺點是變量過多容易造成閱讀困難。

快速繪制

  1. 基于matplotlib

    import matplotlib.pyplot as plt
    import pandas as pd
    from math import pi# 自定義數據
    df = pd.DataFrame({
    'group': ['A','B','C','D'],
    'var1': [38, 1.5, 30, 4],
    'var2': [29, 10, 9, 34],
    'var3': [8, 39, 23, 24],
    'var4': [7, 31, 33, 14],
    'var5': [28, 15, 32, 14]
    })# 計算變量個數
    categories=list(df)[1:]
    N = len(categories)# 僅繪制第一行數據的雷達圖
    values = df.loc[0].drop('group').values.flatten().tolist() # 獲取第一行數據,剔除group
    values += values[:1] # 閉合圓形圖,需要在末尾增加一個與起始相同的值# 計算每個軸的角度
    angles = [n / float(N) * 2 * pi for n in range(N)] # 每個變量的角度位置
    angles += angles[:1] # 閉合圓形圖,需要在末尾增加一個與起始相同的值# 初始化布局
    ax = plt.subplot(111, polar=True)# 將每個變量繪制在極坐標上
    plt.xticks(angles[:-1], categories, color='grey', size=8)# y標簽
    ax.set_rlabel_position(0)
    plt.yticks([10,20,30], ["10","20","30"], color="grey", size=7)
    plt.ylim(0,40)# 繪制數據
    ax.plot(angles, values, linewidth=1, linestyle='solid')# 填充區域顏色
    ax.fill(angles, values, 'b', alpha=0.1)plt.show()
    

    2

定制多樣化的雷達圖

自定義雷達圖一般是結合使用場景對相關參數進行修改,并輔以其他的繪圖知識。參數信息可以通過官網進行查看,其他的繪圖知識則更多來源于實戰經驗,大家不妨將接下來的繪圖作為一種學習經驗,以便于日后總結。

  1. 一圖繪制多個雷達圖

    import matplotlib.pyplot as plt
    import pandas as pd
    from math import pi# 自定義數據
    df = pd.DataFrame({
    'group': ['A','B','C','D'],
    'var1': [38, 1.5, 30, 4],
    'var2': [29, 10, 9, 34],
    'var3': [8, 39, 23, 24],
    'var4': [7, 31, 33, 14],
    'var5': [28, 15, 32, 14]
    })# 計算變量個數
    categories=list(df)[1:]
    N = len(categories)# 僅繪制第一行數據的雷達圖
    values = df.loc[0].drop('group').values.flatten().tolist() # 獲取第一行數據,剔除group
    values += values[:1] # 閉合圓形圖,需要在末尾增加一個與起始相同的值# 計算每個軸的角度
    angles = [n / float(N) * 2 * pi for n in range(N)] # 每個變量的角度位置
    angles += angles[:1] # 閉合圓形圖,需要在末尾增加一個與起始相同的值# 初始化布局
    ax = plt.subplot(111, polar=True)# 偏移-將第一個軸位于頂部
    ax.set_theta_offset(pi / 2)
    ax.set_theta_direction(-1)# 將每個變量繪制在極坐標上
    plt.xticks(angles[:-1], categories)# y標簽
    ax.set_rlabel_position(0)
    plt.yticks([10,20,30], ["10","20","30"], color="grey", size=7)
    plt.ylim(0,40)# 添加多個極坐標圖
    # 繪制第一個圖
    values = df.loc[0].drop('group').values.flatten().tolist()
    values += values[:1]
    ax.plot(angles, values, linewidth=1, linestyle='solid', label="group A")
    ax.fill(angles, values, 'b', alpha=0.1)# 繪制第二個圖
    values = df.loc[1].drop('group').values.flatten().tolist()
    values += values[:1]
    ax.plot(angles, values, linewidth=1, linestyle='solid', label="group B")
    ax.fill(angles, values, 'r', alpha=0.1)# 圖例
    plt.legend(loc='upper right', bbox_to_anchor=(0.1, 0.1))plt.show()
    

    3

  2. 分組雷達圖

    import matplotlib.pyplot as plt
    import pandas as pd
    from math import pi# 自定義數據
    df = pd.DataFrame({
    'group': ['A','B','C','D'],
    'var1': [38, 1.5, 30, 4],
    'var2': [29, 10, 9, 34],
    'var3': [8, 39, 23, 24],
    'var4': [7, 31, 33, 14],
    'var5': [28, 15, 32, 14]
    })# 自定義函數-每一行繪制一個雷達圖
    def make_spider( row, title, color):# 計算變量個數categories=list(df)[1:]N = len(categories)# 計算角度angles = [n / float(N) * 2 * pi for n in range(N)]angles += angles[:1]# 初始化布局ax = plt.subplot(2,2,row+1, polar=True, )# 偏移至頂部ax.set_theta_offset(pi / 2)ax.set_theta_direction(-1)# x標簽plt.xticks(angles[:-1], categories, color='grey', size=8)# y標簽ax.set_rlabel_position(0)plt.yticks([10,20,30], ["10","20","30"], color="grey", size=7)plt.ylim(0,40)# 極坐標圖values = df.loc[row].drop('group').values.flatten().tolist()values += values[:1]ax.plot(angles, values, color=color, linewidth=2, linestyle='solid')ax.fill(angles, values, color=color, alpha=0.4)# 標題plt.title(title, size=11, color=color, y=1.1)# 圖標參數
    my_dpi=96
    plt.figure(figsize=(1000/my_dpi, 1000/my_dpi), dpi=my_dpi)# 調色板
    my_palette = plt.cm.get_cmap("Set2", len(df.index))# 繪制多個圖
    for row in range(0, len(df.index)):make_spider( row=row, title='group '+df['group'][row], color=my_palette(row))
    

    4

總結

以上通過matplotlib結合極坐標繪制雷達圖,并通過其他繪圖知識自定義各種各樣的雷達圖來適應相關使用場景。

共勉~

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

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

相關文章

Go語言 一些問題了解

一、讀取文件數據,是阻塞還是非阻塞的? 分兩種情況:常規讀取文件數據,和網絡IO讀取數據 1. 常規讀取文件數據: io.Reader 和 bufio.Reader 是同步進行的。 bufio.Reader 提供緩沖的讀取操作,意味著數據是…

網站入門:Flask用法講解

Flask是一個使用Python編寫的輕量級Web服務框架,旨在幫助開發人員快速構建和部署Web應用程序。下面將對Flask進行更為詳細的解釋說明,并展示其使用示例與注意事項: 1.解釋說明 定義及特點: Flask以其簡潔和靈活著稱,允許開發者以…

C++:list模擬實現

hello,各位小伙伴,本篇文章跟大家一起學習《C:list模擬實現》,感謝大家對我上一篇的支持,如有什么問題,還請多多指教 ! 如果本篇文章對你有幫助,還請各位點點贊!&#xf…

LeetCode題練習與總結:二叉樹展開為鏈表--114

一、題目描述 給你二叉樹的根結點 root ,請你將它展開為一個單鏈表: 展開后的單鏈表應該同樣使用 TreeNode ,其中 right 子指針指向鏈表中下一個結點,而左子指針始終為 null 。展開后的單鏈表應該與二叉樹 先序遍歷 順序相同。 …

深入探討Java字符串拼接的藝術

引言 在Java編程中,字符串是最基本的數據類型之一。字符串拼接是開發過程中一個非常常見的操作,無論是構建用戶界面的文本,還是生成日志信息,都離不開字符串的拼接。然而,字符串拼接的效率和正確性常常被開發者忽視&a…

格式化數據恢復指南:從備份到實戰,3個技巧一網打盡

朋友們!你們有沒有遇到過那種“啊,我的文件呢?”的尷尬時刻?無論是因為手滑、電腦抽風還是其他原因,數據丟失都可能會讓我們抓狂,甚至有時候,我們可能一不小心就把存儲設備格式化了,…

香橙派OrangePI AiPro測評 【運行qt,編解碼,xfreeRDP】

實物 為AI而生 打開盒子 配置 扛把子的 作為業界首款基于昇騰深度研發的AI開發板,Orange Pi AIpro無論在外觀上、性能上還是技術服務支持上都非常優秀。采用昇騰AI技術路線,集成圖形處理器,擁有8GB/16GB LPDDR4X,可以外接32…

進程通信——管道

什么是進程通信? 進程通信是實現進程間傳遞數據信息的機制。要實現數據信息傳遞就要進程間共享資源——內存空間。那么是哪塊內存空間呢?進程間是相互獨立的,一個進程不可能訪問其他進程的內存空間,那么這塊空間只能由操作系統提…

什么是RPA自動化辦公?

RPA自動化辦公:提升效率的利器 如今,自動化辦公已成為提升效率、減少錯誤、節省成本的關鍵手段。RPA(機器人流程自動化,Robotic Process Automation)作為其中的重要組成部分,正受到越來越多企業的青睞。那…

【全開源】簡單商城系統源碼(PC/UniAPP)

提供PC版本、UniAPP版本(高級授權)、支持多規格商品、優惠券、積分兌換、快遞鳥電子面單、支持移動端樣式、統計報表等 提供全部前后臺無加密源代碼、數據庫離線部署。 構建您的在線商店的基石 一、引言:為什么選擇簡單商城系統源碼? 在數字化時代&am…

【Spring Cloud Alibaba】初識Spring Cloud Alibaba

目錄 回顧主流的微服務框架Spring Cloud 版本簡介Spring Cloud以往的版本發布順序排列如下: 由停更引發的"升級慘案"哪些Netflix組件被移除了? 替換方案服務注冊中心:服務調用:負載均衡:服務降級&#xff1a…

Python—面向對象小解(6)-閉包、裝飾器

一、閉包 在Python中,閉包(closure)是一個函數對象,即使在其詞法作用域外被調用,它仍然能訪問該作用域內的變量。閉包通過“捕獲”周圍作用域的變量,保持這些變量的狀態,即使在外部函數已經返回…

干貨分享 | TSMaster 中 Hex 文件編輯器使用詳細教程

TSMaster 軟件的 Hex 文件編輯器提供了文件處理的功能,這一特性讓使用 TSMaster 軟件的用戶可以更便捷地對 Hex、bin、mot、s19 和 tsbinary 類型的文件進行處理。 本文重點講述 TSMaster 中 Hex 文件編輯器的使用方法,該編輯器能實現將現有的 Hex、bin、…

@vue-office/excel 解決移動端預覽excel文件觸發軟鍵盤

先直接上代碼 不耽誤大家時間 標明下插件庫 非常感謝作者提供預覽插件 vue-office/excel 只需要控制CSS :deep(.x-spreadsheet-overlayer) {.x-spreadsheet-selectors {display: none !important;} } :deep(.x-spreadsheet-bottombar) {li.active {user-select: none !import…

家政上門系統源碼,家政上門預約服務系統開發涉及的主要功能

家政上門預約服務系統開發是指建立一個在線平臺或應用程序,用于提供家政服務的預約和管理功能。該系統的目標是讓用戶能夠方便地預約各種家政服務,如保潔、家庭護理、月嫂、家電維修等,并實現服務供應商管理和訂單管理等功能。 以下是開發家政…

Windows API 速查

Windows API 函數大全 (推薦):https://blog.csdn.net/xiao_yi_xiao/article/details/121604742Windows API 在線參考手冊:http://www.office-cn.net/t/api/index.html?web.htmWindows 開發文檔 (官方):https://learn.microsoft.com/zh-cn/wi…

linux驅動學習(三)之uboot與內核編譯

需要板子一起學習的可以這里購買(含資料):點擊跳轉 GEC6818內核源碼下載:點擊跳轉 一、環境配置 由于GEC6818對應是64位系統,虛擬機中的linux系統也要是64位,比如:ubuntu16.04.rar …

Bee 支持 與 mybatis-plus 混用嗎?

Bee 支持 與 mybatis-plus 混用嗎? 你是在什么場景下要混用呢? mybatis-plus是基于mybatis. 而Bee本身就是一個ORM框架了. Hibernate/MyBatis plus Sharding JDBC Jpa Spring data GraphQL App ORM (Android, 鴻蒙) Bee Bee支持的數據庫 1.MySQL 2.Oracle 3.SQL…

elasticsearch的常規操作--增刪改查和批量處理

1、_cat 查詢 GET /_cat/nodes: 查看所有節點 GET /_cat/health: 查看es 健康狀況 GET /_cat/master: 查看主節點 GET /_cat/indices:查看所有索引show databases; 2、索引一個文檔(保存) 保存一個數據&…

某紅書旋轉滑塊驗證碼分析與協議算法實現(高通過率)

文章目錄 1. 寫在前面2. 接口分析3. 驗證軌跡4. 算法還原 【🏠作者主頁】:吳秋霖 【💼作者介紹】:擅長爬蟲與JS加密逆向分析!Python領域優質創作者、CSDN博客專家、阿里云博客專家、華為云享專家。一路走來長期堅守并致…