欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python數據可視化Seaborn繪制山脊圖

 更新時間:2022年01月25日 14:35:02   作者:趙卓不凡?  
這篇文章主要介紹了利用python數據可視化Seaborn繪制山脊圖,山脊圖一般由垂直堆疊的折線圖組成,這些折線圖中的折線區(qū)域間彼此重疊,此外它們還共享相同的x軸.下面來看看具體的繪制過程吧,需要的小伙伴可以參考一下

1. 引言

山脊圖一般由垂直堆疊的折線圖組成,這些折線圖中的折線區(qū)域間彼此重疊,此外它們還共享相同的x軸.

山脊圖經常以一種相對不常見且非常適合吸引大家注意力的緊湊圖的形式表現(xiàn)。觀察上圖,我們給其起名叫Ridge plot是非常恰當的,因為上述圖表看起來確實很像山的脊背.此外,上述圖像還有另一個稱呼叫做Joy Plots–這主要是因為Joy Division樂隊在如下專輯封面上采用了這種可視化形式.

2. 舉個栗子

在介紹完山脊圖的由來背景后,現(xiàn)在讓我們來舉個例子。我們使用以下數據集,主要包含 Netflix 的作品及對應的 IMDB 分數。

import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
df = pd.read_csv('./data/film.csv')
languages = ['English', 'Hindi', 'Spanish',?
? ? ? ? ? ? ?'French', 'Italian', 'Portuguese']
df_filtered = df[df['Language'].isin(languages)]
df_filtered

運行結果如下:

上表中從左往右,依次為ID,電影名稱,電影類型,首映日期,電影長度,IMDB評分,以及電影語種.

接下來我們首先使用 Seaborns FacetGrid庫來為每個語言類別的電影創(chuàng)建不同IMDB下的概率密度分布曲線圖。實現(xiàn)這個功能很簡單,僅需要對數據表中相應名稱字段來按值進行分組統(tǒng)計即可。

代碼如下:

sns.set_theme(style="white")
g = sns.FacetGrid(df_filtered, row="Language")
g.map_dataframe(sns.kdeplot, x="IMDB Score")
g.set(ylabel="")

結果如下:

上述實現(xiàn)采用的為默認的參數配置,橫軸表示IMDB分數,縱軸表示對應不同語種電影在不同IMDB得分下的概率. 從上述圖例中可以看出單個語種電影評分的概率密度分布,但是很難查看不同語種間的對比分布。

接著我們嘗試來改進顯示效果,我們通過設置FacetGrid函數中相應的參數來讓圖表變得更寬更短。

代碼如下:

sns.set_theme(style="white")
g = sns.FacetGrid(df_filtered, row="Language", aspect=9, height=1.2)
g.map_dataframe(sns.kdeplot, x="IMDB Score")
g.set(ylabel="")

結果如下:

上述改進雖然可以讓數據間的對比變得明顯一些,但是這個可視化從視覺效果上看并沒有太大的吸引力。

觀察上圖,我們其實并沒有多少人去關注左側的Y軸信息,我們更關注的是數據的形狀.這就意味著我們這里可以刪除Y軸.

代碼如下:

sns.set_theme(style="white")
g = sns.FacetGrid(df_filtered, row="Language", aspect=9, height=1.2)
g.map_dataframe(sns.kdeplot, x="IMDB Score")
g.set_titles("")
g.set(yticks=[],ylabel="")
g.despine(left=True)

運行結果如下:

3.山脊圖

經過我們的優(yōu)化,上述不同語種電影的IMDB得分概率密度分布還是不夠直觀.
接下來我們一步一步來介紹我們的終結法寶–山脊圖.

首先,我們需要確保背景是透明的。

sns.set_theme(style="white", rc={"axes.facecolor": (0, 0, 0, 0)})

接著,我們需要填充線條的內部區(qū)域。

g.map_dataframe(sns.kdeplot, x="IMDB Score", fill=True, alpha=1)

上述操作后,不同語種間的區(qū)域會出現(xiàn)重疊,這時我們還需要區(qū)分重疊部分。

我們通過以下代碼進行區(qū)分:

sns.set_theme(style="white", rc={"axes.facecolor": (0, 0, 0, 0)})
g = sns.FacetGrid(df_filtered, row="Language", aspect=9, height=1.2)
g.map_dataframe(sns.kdeplot, x="IMDB Score", fill=True, alpha=1)
g.map_dataframe(sns.kdeplot, x="IMDB Score", color='black')
g.fig.subplots_adjust(hspace=-.5)
g.set_titles("")
g.set(yticks=[])
g.despine(left=True)

運行結果如下:

到目前位置,我們實現(xiàn)了我們第一版的山脊圖,接著我們可以根據需要來自定義擴展它。
FacetGrid函數非常適合創(chuàng)建多個可視化圖例,并且 .map 和 .map_dataframe 方法可以讓我們與所有子圖進行交互。

代碼如下:

sns.set_theme(style="white", rc={"axes.facecolor": (0, 0, 0, 0), 'axes.linewidth':2})
palette = sns.color_palette("Set2", 12)
g = sns.FacetGrid(df_filtered, palette=palette, row="Language", hue="Language", aspect=9, height=1.2)
g.map_dataframe(sns.kdeplot, x="IMDB Score", fill=True, alpha=1)
g.map_dataframe(sns.kdeplot, x="IMDB Score", color='black')
def label(x, color, label):
? ? ax = plt.gca()
? ? ax.text(0, .2, label, color='black', fontsize=13,
? ? ? ? ? ? ha="left", va="center", transform=ax.transAxes)
? ??
g.map(label, "Language")
g.fig.subplots_adjust(hspace=-.5)
g.set_titles("")
g.set(yticks=[], xlabel="IMDB Score")
g.despine( left=True)
plt.suptitle('Netflix Originals - IMDB Scores by Language', y=0.98)

運行結果如下:

4.擴展

最后,我們可以使用下面代碼來復制Joy Division 專輯封面的可視化效果。

代碼如下:

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

if __name__ == "__main__":
? ? url = "./data/pulsar.csv"
? ? df = pd.read_csv(url, header=None)
? ? df = df.stack().reset_index()
? ? df.columns = ['idx', 'x', 'y']
? ? sns.set_theme(rc={"axes.facecolor": (0, 0, 0, 0), 'figure.facecolor':'#000000', 'axes.grid':False})
? ? g = sns.FacetGrid(df, row='idx', aspect=50, height=0.4)
? ? # Draw the densities in a few steps
? ? g.map(sns.lineplot, 'x', 'y', clip_on=False, alpha=1, linewidth=1.5)
? ? g.map(plt.fill_between, 'x', 'y', color='#000000')
? ? g.map(sns.lineplot, 'x', 'y', clip_on=False, color='#ffffff', lw=2)
? ? # Set the subplots to overlap
? ? g.fig.subplots_adjust(hspace=-0.95)
? ? g.set_titles("")
? ? g.set(yticks=[], xticks=[], ylabel="", xlabel="")
? ? g.despine(bottom=True, left=True)
? ? plt.savefig('joy.png', facecolor='#000000')

運行結果如下:

5.結論

總的來說,山脊圖非常適合關注數據的分布對比。山脊圖以吸引人的美學可以引起觀眾的共鳴,使它們成為向用戶介紹數據分布對比分析時的絕佳選擇。

到此這篇關于python數據可視化Seaborn繪制山脊圖的文章就介紹到這了,更多相關Seaborn繪制山脊圖內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • pandas使用fillna函數填充NaN值的代碼實例

    pandas使用fillna函數填充NaN值的代碼實例

    最近在工作中遇到一個問題,pandas讀取的數據中nan在保存后變成空字符串,所以下面這篇文章主要給大家介紹了關于pandas使用fillna函數填充NaN值的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-07-07
  • Python進階之利用+和*進行列表拼接

    Python進階之利用+和*進行列表拼接

    在我們學習python的過程中,有一個非常常見的語法,那就是利用+和*進行序列的拼接以及其他操作。今天就帶大家從使用+和*進行拼接出發(fā)認識一個大家非常容易犯的代碼錯誤。話不多說我們開始吧
    2023-04-04
  • pytorch常用函數定義及resnet模型修改實例

    pytorch常用函數定義及resnet模型修改實例

    這篇文章主要為大家介紹了pytorch常用函數定義及resnet模型修改實例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • Python Web開發(fā)模板引擎優(yōu)缺點總結

    Python Web開發(fā)模板引擎優(yōu)缺點總結

    這篇文章主要介紹了Python Web開發(fā)模板引擎優(yōu)缺點總結,需要的朋友可以參考下
    2014-05-05
  • Django項目中使用JWT的實現(xiàn)代碼

    Django項目中使用JWT的實現(xiàn)代碼

    這篇文章主要介紹了Django項目中使用JWT的實現(xiàn)代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-11-11
  • Python統(tǒng)計字符串中英文字母、空格、數字和其它字符的個數

    Python統(tǒng)計字符串中英文字母、空格、數字和其它字符的個數

    這篇文章主要給大家介紹了關于Python統(tǒng)計字符串中英文字母、空格、數字和其它字符的個數的相關資料,本文實例講述了python統(tǒng)計字符串中指定字符出現(xiàn)次數的方法,需要的朋友可以參考下
    2023-06-06
  • 詳解python數據結構之隊列Queue

    詳解python數據結構之隊列Queue

    這篇文章主要介紹了python數據結構之隊列Queue,文中有非常詳細的代碼示例,對正在學習python的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-05-05
  • python pygame 憤怒的小鳥游戲示例代碼

    python pygame 憤怒的小鳥游戲示例代碼

    這篇文章主要介紹了python pygame 憤怒的小鳥游戲,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • python光學仿真實現(xiàn)光線追跡之空間關系

    python光學仿真實現(xiàn)光線追跡之空間關系

    這篇文章主要介紹了python光學仿真中實現(xiàn)光線追跡的空間關系示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2021-10-10
  • 你所不知道的Python奇技淫巧13招【實用】

    你所不知道的Python奇技淫巧13招【實用】

    有時候你會看到很Cool的Python代碼,你驚訝于它的簡潔,你不由自主地贊嘆:竟然還能這樣寫。其實,這些優(yōu)雅的代碼都要歸功于Python的特性,只要你能掌握這些Pythonic的技巧,你一樣可以寫出像詩一樣的Python代碼。本文主要介紹Python應用的一些小技巧。一起來看下吧
    2016-12-12

最新評論