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

溫馨提示×

溫馨提示×

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

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

如何使用python數據可視化Seaborn繪制山脊圖

發布時間:2022-01-03 18:48:22 來源:億速云 閱讀:603 作者:小新 欄目:開發技術

這篇文章主要介紹如何使用python數據可視化Seaborn繪制山脊圖,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

1. 引言

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

如何使用python數據可視化Seaborn繪制山脊圖

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

如何使用python數據可視化Seaborn繪制山脊圖

2. 舉個栗子

在介紹完山脊圖的由來背景后,現在讓我們來舉個例子。我們使用以下數據集,主要包含 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

運行結果如下:

如何使用python數據可視化Seaborn繪制山脊圖

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

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

代碼如下:

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

結果如下:

如何使用python數據可視化Seaborn繪制山脊圖

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

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

代碼如下:

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

結果如下:

如何使用python數據可視化Seaborn繪制山脊圖

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

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

代碼如下:

sns.set_theme()
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)

運行結果如下:

如何使用python數據可視化Seaborn繪制山脊圖

3.山脊圖

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

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

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

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

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

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

我們通過以下代碼進行區分:

sns.set_theme(, 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)

運行結果如下:

如何使用python數據可視化Seaborn繪制山脊圖

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

代碼如下:

sns.set_theme(, 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)

運行結果如下:

如何使用python數據可視化Seaborn繪制山脊圖

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')

運行結果如下:

如何使用python數據可視化Seaborn繪制山脊圖

以上是“如何使用python數據可視化Seaborn繪制山脊圖”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

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

AI

海口市| 江津市| 碌曲县| 长阳| 顺昌县| 剑阁县| 青河县| 田林县| 南康市| 舟曲县| 铁力市| 博乐市| 枣强县| 胶州市| 剑河县| 天柱县| 临潭县| 汽车| 武邑县| 霍州市| 兴和县| 呼玛县| 昌图县| 伊春市| 大连市| 石河子市| 定南县| 绩溪县| 石景山区| 舟曲县| 开远市| 余庆县| 祁门县| 青海省| 蒙阴县| 门头沟区| 尚义县| 通山县| 浮山县| 保康县| 玛多县|