中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python數據可視化實現泡泡堆積關聯圖

發布時間:2021-07-23 09:46:19 來源:億速云 閱讀:346 作者:chen 欄目:大數據

這篇文章主要介紹“Python數據可視化實現泡泡堆積關聯圖”,在日常操作中,相信很多人在Python數據可視化實現泡泡堆積關聯圖問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Python數據可視化實現泡泡堆積關聯圖”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

   

前言

有小伙伴說,使用 matplotlib 做出來的圖表比不上其他的基于 js 包裝的庫(pyechart、bokeh、plotly等)漂亮,他們可以還可以交互。同時,基于 matplotlib  包裝的 seaborn 似乎也比較省代碼。

本想寫一篇文章整體說一下這些庫的對比,但是如果沒有實際例子不太符合我的風格。

因此,今天的目標圖表是其他上層可視化庫難以做到(或者根本無法完成):

Python數據可視化實現泡泡堆積關聯圖  
  • 此圖表是模仿《經濟學人》,是關于加拿大移民與出生地相關的圖表

那些基于 js 包裝的可視化庫,在js環境下,按理應該是可以做到。但在 Python 中就不會這么樂觀

有機會我會分享 d3.js 的做法,你會發現他與 matplotlib  的思路很相似

本文所需要的庫如下:

Python數據可視化實現泡泡堆積關聯圖  
  • 行8:cycler 包只是為了方便定義顏色板

數據是這樣子:

Python數據可視化實現泡泡堆積關聯圖  
  • 行3:泡泡圖的數據列

  • 行4:堆積圖的數據列

本文所有的通用函數以寬表作為依據,行索引放 X 軸,每一列作為不同的圖表系列

這是顏色的定義:

Python數據可視化實現泡泡堆積關聯圖  
  • m_color_cycle 定義了7個系列的顏色,顏色值提取自示例圖表

  • m_bubble_color 是泡泡圖的顏色

篇幅有限,我不會對所有的知識點都作詳細講解


 

逐一擊破

通常復雜的可視化是通過多種類型的圖形組合而成,顯然這次的目標圖表是由3個部分組成:

  1. 堆積圖,實際就是四邊形圖形而已

  2. 泡泡圖,實際就是圓圈圖形

  3. 中間作為連接修飾的長方形

為什么我用"圖形"去描述他們?

如果你使用一些上層的可視化庫,你會發現他們會在圖表類型層面歸類,這無疑讓你能快速作圖。但缺點就是無法隨心所欲定制化圖表。

而 matplotlib  提供了底層"圖形"的控制,同時也提供了基本圖表操作。

首先看看如何做出堆積圖,下面以2個系列作為示例:

Python數據可視化實現泡泡堆積關聯圖  
  • 行7:使用 Axes.bar 方法可以畫出柱狀圖,其中 bottom 參數決定了每個柱子的起始位置,默認情況下全是0

  • 行11:當畫第二個系列時,只要把第一個系列的 y 值設置為 第二系列 的 起始點,自然而然就做出了堆積圖的效果

圖表如下:

Python數據可視化實現泡泡堆積關聯圖  

知道這個原理,那么就可以定義通用的函數:

Python數據可視化實現泡泡堆積關聯圖  
  • 本文所有的通用函數都基于寬表數據

  • 行3:通過累計求和+偏移操作,求出每個系列的 bottom 值

  • 行5:直接從 DataFrame 中遍歷取出每一列,分別畫柱子。m_color_cycle 是之前定義好的顏色板

行3是基本的 pandas 操作,有興趣可以參考我的 pandas 專欄

調用如下:

Python數據可視化實現泡泡堆積關聯圖  
  • 行3:原數據有多余的列,要選出需要的列,然后按第一年的值,橫向排序一下

圖表如下:

Python數據可視化實現泡泡堆積關聯圖  

基本的圖表做出來,最后再調整一些細節(比如y軸的位置,刻度線等等),因為這些只是一些操作,非常簡單。

接下來做泡泡圖


 

圖形屬性映射

數據可視化的本質,實際是數據到圖形元素的映射。

看看之前的堆積圖,我們成功把數據中的3種維度數據映射上去:

  1. 年份,映射到柱子的水平位置(x軸位置)

  2. 數值,映射到柱子的高度(調用 bar 方法時的參數 height)

  3. 地區,映射到柱子的顏色

看一個極端的例子。數據中還有一列移民人數(migrant),我們仍然可以往堆積圖上映射:

Python數據可視化實現泡泡堆積關聯圖  

雖然現在圖表看起來非常奇怪,但的確是可行:

Python數據可視化實現泡泡堆積關聯圖  
  • 每一年的柱子寬度與數據 migrant 關聯起來,柱子越寬,表示那一年移民人數越多

現在,你應該感受到數據可視化的本質,同時也看到,每一種的圖表可以合理映射的維度是有限的。

比如上面的堆積圖的柱子寬度顯然不是一個合理映射屬性。

解決方法就是用其他的"圖形"繼續做映射。

我們在同一個坐標系上畫散點圖,映射關系如下:

  • 圓點的水平位置映射為年份

  • 圓點的垂直位置映射為固定值(只要在柱子的下方就可以)

  • 圓點的半徑映射為數據 migrant

代碼如下:

Python數據可視化實現泡泡堆積關聯圖  
  • 本文所有通用函數基于 DataFrame 固定列名。比如數據中需要有名為 size 的列,此列作為泡泡的大小。

  • 行6:Axes.scatter 即可畫出圓點,參數 s 就是圓點的半徑

  • 參數 clip_on 設置為 False,可以防止圓點太大超出了可視區被裁剪

調用如下:

Python數據可視化實現泡泡堆積關聯圖  
  • 行6:把列名修改合適

  • 行7:參數y,決定泡泡的位置。注意這里的 -25 是對應圖表上y軸的數值

看看圖表:

Python數據可視化實現泡泡堆積關聯圖  

下一步,加上中間連接修飾的矩形框


 

畫圖形

matplotlib 內置了許多基本圖形,因此創建圖形不是什么難事:

Python數據可視化實現泡泡堆積關聯圖  
  • 這是在

  • 行9:創建一個矩形,第一個參數是系列,表示 x、y 的位置。

  • 行10:往坐標系中加入這個圖形

注意,上面行9中設置的參數的數值,默認是按數據表示。

比如,[0,40] 的40,相當于指定矩形的左下角點位于 y 軸值為 40 的位置

但是,[0,40] 的 0 應該表示的是 x 軸,為什么是0?

這是因為我們作圖時,傳給 x 軸的是字符串:

Python數據可視化實現泡泡堆積關聯圖  

此時坐標系 x 軸被 matplotlib 轉成 0 開始的升序編碼

matplotlib 有6種坐標系轉換,這是最重要的核心機制,這里不深入講解

看看效果:

Python數據可視化實現泡泡堆積關聯圖  
  • 矩形左下角在 第一個柱子中間,y 軸點40的位置

  • 高度剛好占 y 軸 20個單位的長度

  • 寬度剛好是 10 個柱子寬度總和

知道了原理,那么需求就非常容易了:

Python數據可視化實現泡泡堆積關聯圖  

看看效果:

Python數據可視化實現泡泡堆積關聯圖  

非常好,為泡泡圖加上數據標簽,原理與之前一樣:

Python數據可視化實現泡泡堆積關聯圖  
Python數據可視化實現泡泡堆積關聯圖  

最后,按要求調整軸的細節即可:

Python數據可視化實現泡泡堆積關聯圖  

完整調用如下:

Python數據可視化實現泡泡堆積關聯圖  

效果如下:

Python數據可視化實現泡泡堆積關聯圖  

你會發現,整個過程我們一直在設置數據與圖形的關聯,這就是 matplotlib 的核心思路!

看似需要很多代碼,但是我們非常容易就可以使他們在不同的數據之間重復使用。

接下來我會繼續編寫更多非常規要求的圖表,敬請關注!

到此,關于“Python數據可視化實現泡泡堆積關聯圖”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

时尚| 五台县| 通州市| 治多县| 澳门| 股票| 堆龙德庆县| 海林市| 亚东县| 永兴县| 辽源市| 渭南市| 阿城市| 甘孜县| 新巴尔虎左旗| 利辛县| 陆河县| 崇文区| 通许县| 潮安县| 湘潭县| 西乌珠穆沁旗| 峨山| 贵阳市| 吐鲁番市| 白水县| 获嘉县| 兴义市| 巴中市| 台湾省| 攀枝花市| 仁化县| 福建省| 卓资县| 容城县| 柞水县| 垦利县| 黔西| 淄博市| 乐至县| 西盟|