Matplotlib和Seaborn之多變量可視化

使用顏色表示第三個變量

在 matplotlib 和 seaborn 中貌嫡,向圖形中添加第三個變量的最常見方式是使用顏色岛抄。你已經在這節(jié)課的集群條形圖和熱圖中見過這種方式。violinplot弦撩、boxplotbarplot 函數都可以通過添加“hue”參數顯示第三個變量集群益楼。可以調整熱圖的代碼感凤,以便描繪第三個變量(而不是計數)陪竿,只需更改 hist2d 的“weights”參數屠橄,或者要饋送給 heatmap 的數據整合函數闰挡。

對于散點圖來說,可以通過兩種不同的方式設置顏色溪北,取決于變量類型夺脾。對于數字變量來說,你可以直接在 scatter 函數調用中設置“color”或“c”參數蚀乔。

plt.scatter(data = df, x = 'num_var1', y = 'num_var2', c = 'num_var3')
plt.colorbar()

image.png

如果你有一個定性變量菲茬,可以通過 seaborn 的 FacetGrid 類上的“hue”參數為分類變量的不同級別設置不同的顏色婉弹。

g = sb.FacetGrid(data = df, hue = 'cat_var1', size = 5)
g.map(plt.scatter, 'num_var1', 'num_var2')
g.add_legend()

image.png

調色板類型

根據你的變量類型,你可能需要選擇默認調色板之外的其他調色板。有三種主要調色板類型:定性佩脊、連續(xù)和發(fā)散調色板垫卤。

定性調色板面向的是名目型數據。這是默認調色板采用的調色板類歇盼。在定性調色板中评抚,連續(xù)性顏色值是有區(qū)別的,因此并沒暗含任何固有的順序邢笙。好的定性調色板的顏色應該嘗試避免在亮度和飽和度方面出現劇烈變化侍匙,導致讀者認為某個類別比其他類別更重要,除非要故意這么強調妇汗。

sb.palplot(sb.color_palette(n_colors=9))

(文檔:seaborn palplot, color_palette

image.png

對于其他類型的數據(名目和數字),可能需要在連續(xù)尺度和發(fā)散尺度之間做出選擇寞焙。在連續(xù)調色板中告唆,連續(xù)的顏色值應該相互之間保持系統(tǒng)性。通常模她,在單個或小范圍的色調之間保持從淺到深的順序懂牧,其中淺色表示值較低,深色表示值很高畜侦。默認的連續(xù)色圖“viridis”采用的是相反的表示法躯保,深色表示較低的值,淺色表示很高的值验懊。

sb.palplot(sb.color_palette('viridis', 9))

image.png

大多數情況下尸变,連續(xù)調色板可以很好地描繪有序或數字數據召烂。但是,如果變量有一個有意義的零或中心值奏夫,你可能需要考慮使用發(fā)散調色板酗昼。在發(fā)散調色板中,將兩個具有不同色調的連續(xù)調色板放在一起仔雷,并用一個共同的顏色(通常是白色或灰色)連接它們。一個色調表示大于中心點的值电抚,另一個色調表示小于中心點的值。

sb.palplot(sb.color_palette('vlag', 9))

image.png

設置調色板

如果你想要(或需要)更改圖形的色圖俺祠,最簡單的方式是使用 matplotlib 或 seaborn 中的某個內置函數蜘渣。matplotlib 文檔的此部分具有一個可以當做顏色映射的字符串列表肺然。對于大部分情況,請使用 matplotlib 的內置調色板(’viridis' 等)或來自 ColorBrewer 的調色板拾碌;剩余的調色板看起來可能不夠一致街望。Seaborn 還增加了以下多個調色板:

  • 定性(全部多達 6 種顏色):'deep’、’pastel’防症、’dark’哎甲、’muted’、’bright’、’colorblind'
  • 有序:’rocket' (white-orange-red-purple-black)喝噪、’mako' (mint-green-blue-purple-black)
  • 發(fā)散:’vlag' (blue-white-red)酝惧、’icefire' (blue-black-orange)

對于所有這些字符串,在后面附加 '_r' 會顛倒調色板巫财,如果序列或發(fā)散調色板的呈現方式與你預期的相反哩陕,這么設置很有用赫舒。

設置調色板的方式取決于所使用的繪圖函數闽瓢。請參閱相關文檔,了解具體詳情缺猛。例如椭符,在 FacetGrid 中可以通過“palette”參數設置調色板,在 scatter 中可以通過“cmap”參數設置有咨。在使用發(fā)散調色板時曙搬,你可能需要指定“vmin”和“vmax”參數纵装,以便調色板中的中性點與刻度的中心點為同一個點。此外橡娄,創(chuàng)建其他標準化函數的解決方案(例如在此 Stack Overflow 會話中發(fā)布的解決方案)可以用于精細地控制色圖挽唉。發(fā)散顏色刻度對熱圖來說很常見,專門有一個“center”參數用于設置中心值瓶籽。

最后塑顺,請注意透明度和重疊對圖形可解釋性的影響。如果定性刻度上具有不同顏色的點重疊了扬绪,可能會形成無法與調色板中的顏色匹配的第三種顏色裤唠。如果定性刻度上有多個點重疊了,那么可能會形成一個實際上不存在于數據中的值墓赴。為了保險起見,避免或盡量不使用透明度竣蹦。你可能需要僅繪制示例數據點痘括,確保第三個變量的效果很明顯。

plt.figure(figsize = [5,5])

# left: qualitative points
plt.scatter(0,0.5,s = 1e4, c = sb.color_palette()[0], alpha = 0.5)
plt.scatter(0,-0.5,s = 1e4, c = sb.color_palette()[1], alpha = 0.5)

# right: quantitative points
plt.scatter(1,0.5,s = 1e4, c = sb.color_palette('Blues')[2], alpha = 0.5)
plt.scatter(1,-0.5,s = 1e4, c = sb.color_palette('Blues')[4], alpha = 0.5)

# set axes for point overlap
plt.xlim(-0.5,1.5)
plt.ylim(-3.5,3.5)
plt.xticks([])
plt.yticks([])

image.png

在兩個變量之間進行分面

之前在這節(jié)課挠日,你了解了可以如何使用 FacetGrid 根據分類變量的不同級別對數據集分組嚣潜,然后為每個子集創(chuàng)建一個圖形椅贱。之前演示的分面圖形是單變量圖形,實際上你可以使用任何圖形類型计技,并使用分面雙變量圖形創(chuàng)建多變量圖形山橄。

借助 FacetGrid,不僅可以根據列對變量進行分面睡雇,還可以根據行分面饮醇。我們可以在兩個分面坐標軸的每個軸上設置分類變量,這是描繪多變量趨勢的另外一種方法观蓄。

g = sb.FacetGrid(data = df, col = 'cat_var2', row = 'cat_var1', size = 2.5,
                margin_titles = True)
g.map(plt.scatter, 'num_var1', 'num_var2')

設置 margin_titles = True 表示不再將每個分面標記為行和列變量的組合呵晚,而是將標簽單獨放在分面網格的頂部和右側邊緣沫屡。這種方式效果很棒沮脖,因為默認的圖形標題通常很長芯急。

image.png
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末娶耍,一起剝皮案震驚了整個濱河市饼酿,隨后出現的幾起案子,更是在濱河造成了極大的恐慌想鹰,老刑警劉巖药版,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件槽片,死亡現場離奇詭異,居然都是意外死亡碌廓,警方通過查閱死者的電腦和手機蝙云,發(fā)現死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進店門勃刨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人身隐,你說我怎么就攤上這事贾铝。” “怎么了玖绿?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵叁巨,是天一觀的道長锋勺。 經常有香客問我狡蝶,道長贮勃,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任奏瞬,我火速辦了婚禮垫释,結果婚禮上,老公的妹妹穿的比我還像新娘显蝌。我一直安慰自己订咸,他們只是感情好脏嚷,可當我...
    茶點故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著神郊,像睡著了一般趾唱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上夕晓,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天蒸辆,我揣著相機與錄音析既,去河邊找鬼。 笑死拂玻,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播囤屹,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼肋坚,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了诲泌?” 一聲冷哼從身側響起铣鹏,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤诚卸,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后卒密,有當地人在樹林里發(fā)現了一具尸體棠赛,經...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡睛约,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了而芥。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片膀值。...
    茶點故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡沧踏,死狀恐怖,靈堂內的尸體忽然破棺而出秘案,到底是詐尸還是另有隱情,我是刑警寧澤阱高,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布赤惊,位于F島的核電站,受9級特大地震影響圈暗,放射性物質發(fā)生泄漏裕膀。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望抄谐。 院中可真熱鬧,春花似錦海铆、人聲如沸挣惰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽竖幔。三九已至,卻和暖如春募逞,著一層夾襖步出監(jiān)牢的瞬間馋评,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工纠脾, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留苟蹈,地道東北人。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓再来,卻偏偏與公主長得像,于是被迫代替她去往敵國和親磷瘤。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,728評論 2 351

推薦閱讀更多精彩內容