python数据可视化Seaborn绘制山脊图

目录
  • 1. 引言
  • 2. 举个栗子
  • 3.山脊图
  • 4.扩展
  • 5.结论

1. 引言

山脊图一般由垂直堆叠的折线图组成,这些折线图中的折线区域间彼此重叠,此外它们还共享相同的x轴.

山脊图经常以一种相对不常见且非常适合吸引大家注意力的紧凑图的形式表现。观察上图,我们给其起名叫Ridge plot是非常恰当的,因为上述图表看起来确实很像山的脊背.此外,上述图像还有另一个称呼叫做Joy Plots–这主要是因为Joy Division乐队在如下专辑封面上采用了这种可视化形式.

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

运行结果如下:

上表中从左往右,依次为ID,电影名称,电影类型,首映日期,电影长度,IMDB评分,以及电影语种.

接下来我们首先使用 Seaborns FacetGrid库来为每个语言类别的电影创建不同IMDB下的概率密度分布曲线图。实现这个功能很简单,仅需要对数据表中相应名称字段来按值进行分组统计即可。

代码如下:

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

结果如下:

上述实现采用的为默认的参数配置,横轴表示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.山脊图

经过我们的优化,上述不同语种电影的IMDB得分概率密度分布还是不够直观.
接下来我们一步一步来介绍我们的终结法宝–山脊图.

首先,我们需要确保背景是透明的。

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

接着,我们需要填充线条的内部区域。

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

上述操作后,不同语种间的区域会出现重叠,这时我们还需要区分重叠部分。

我们通过以下代码进行区分:

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)

运行结果如下:

到目前位置,我们实现了我们第一版的山脊图,接着我们可以根据需要来自定义扩展它。
FacetGrid函数非常适合创建多个可视化图例,并且 .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绘制山脊图内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python数据可视化Seaborn画热力图

    目录 1.引言 2. 栗子 3. 数据预处理 4. 画热力图 5. 添加数值 6. 调色板优化 1.引言 热力图的想法很简单,用颜色替换数字. 现在,这种可视化风格已经从最初的颜色编码表格走了很长一段路.热力图被广泛用于地理空间数据.这种图通常用于描述变量的密度或强度,模式可视化.方差甚至异常可视化等. 鉴于热力图有如此多的应用,本文将介绍如何使用Seaborn 来创建热力图. 2. 栗子 首先我们导入Pandas和Numpy库,这两个库可以帮助我们进行数据预处理. import pandas

  • Python 数据可视化之Seaborn详解

    目录 安装 散点图 线图 条形图 直方图 总结 安装 要安装 seaborn,请在终端中输入以下命令. pip install seaborn Seaborn 建立在 Matplotlib 之上,因此它也可以与 Matplotlib 一起使用.一起使用 Matplotlib 和 Seaborn 是一个非常简单的过程.我们只需要像之前一样调用 Seaborn Plotting 函数,然后就可以使用 Matplotlib 的自定义函数了. 注意: Seaborn 加载了提示.虹膜等数据集,但在本教程

  • Python编程matplotlib绘图挑钻石seaborn小提琴和箱线图

    目录 箱线图 小提琴图 想不到大家都这么喜欢用python给女朋友挑钻石,所以我又写了个续. 如果看过之前一篇用python给女朋友挑钻石的文章,那么可以直接从箱线图开始读. seaborn是matplotlib的补充包,提供了一系列高颜值的figure,并且集成了多种在线数据集,通过sns.load_dataset()进行调用,可供学习,如果网络不稳定,可下载到本地,然后在调用的时候使用把cache设为True. 其中,diamonds数据集中包含了钻石数据,总计十项,分别是[重量/克拉]ca

  • Python编程使用matplotlib挑钻石seaborn画图入门教程

    目录 scatter_plot lmplot jointplot 挑钻石第二弹 seaborn是matplotlib的补充包,提供了一系列高颜值的figure,并且集成了多种在线数据集,通过sns.load_dataset()进行调用,可供学习,如果网络不稳定,可下载到本地,然后在调用的时候使用把cache设为True. scatter_plot 官方的示例就很不错,绘制了diamonds数据集中的钻石数据.diamonds中总共包含十项数据,分别是重量/克拉.切割水平.颜色.透明度.深度.ta

  • python可视化分析的实现(matplotlib、seaborn、ggplot2)

    一.matplotlib库 1.基本绘图命令 import matplotlib.pyplot as plt plt.figure(figsize=(5,4)) #设置图形大小 plt.rcParams['axes.unicode_minus']=False #正常显示负号 plt.rcParams['font.sans-self']=['Kai Ti'] #设置字体,这里是楷体,SimHei表示黑体 #基本统计图 plt.bar(x,y);plt.pie(y,labels=x);plt.plo

  • Python中seaborn库之countplot的数据可视化使用

    在Python数据可视化中,seaborn较好的提供了图形的一些可视化功效. seaborn官方文档见链接:http://seaborn.pydata.org/api.html countplot是seaborn库中分类图的一种,作用是使用条形显示每个分箱器中的观察计数.接下来,对seaborn中的countplot方法进行详细的一个讲解,希望可以帮助到刚入门的同行. 导入seaborn库 import seaborn as sns 使用countplot sns.countplot() cou

  • python数据可视化Seaborn绘制山脊图

    目录 1. 引言 2. 举个栗子 3.山脊图 4.扩展 5.结论 1. 引言 山脊图一般由垂直堆叠的折线图组成,这些折线图中的折线区域间彼此重叠,此外它们还共享相同的x轴. 山脊图经常以一种相对不常见且非常适合吸引大家注意力的紧凑图的形式表现.观察上图,我们给其起名叫Ridge plot是非常恰当的,因为上述图表看起来确实很像山的脊背.此外,上述图像还有另一个称呼叫做Joy Plots–这主要是因为Joy Division乐队在如下专辑封面上采用了这种可视化形式. 2. 举个栗子 在介绍完山脊图

  • python数据可视化matplotlib绘制折线图示例

    目录 plt.plot()函数各参数解析 各参数具体含义为: x,y color linestyle linewidth marker 关于marker的参数 plt.plot()函数各参数解析 plt.plot()函数的作用是绘制折线图,它的参数有很多,常用的函数参数如下: plt.plot(x,y,color,linestyle,linewidth,marker,markersize,markerfacecolor,markeredgewidth,markeredgecolor) 各参数具体

  • Python数据可视化之简单折线图的绘制

    目录 创建RandomWalk类 选择方向 绘制随机漫步图 模拟多次随机漫步 给点着色 突出起点和终点 增加点数 调整尺寸以适用屏幕 创建RandomWalk类 为模拟随机漫步,我们将创建一个RandomWalk类,随机选择前进方向,这个类有三个属性,一个存储随机漫步的次数,另外两个存储随机漫步的每个点的x,y坐标,每次漫步都从点(0,0)出发 from random import choice class RandomWalk(): '''一个生成随机漫步数据的类''' def __init_

  • Python matplotlib可视化之绘制韦恩图

    目录 本文速览 1.matplotlib_venn (1)2组数据venn图 (2)3组数据venn图 2.pyvenn 2组数据venn 3组数据venn 4组数据venn 5组数据venn 6组数据venn 本文速览 2组数据venn 3组数据venn 4组数据venn 5组数据venn图 6组数据venn python中Matplotlib并没有现成的函数可直接绘制venn图, 不过已经有前辈基于matplotlib.patches及matplotlib.path开发了两个轮子: matp

  • Python数据可视化之绘制柱状图和条形图

    一.实验目的: 1.掌握Python中柱状图.条形图绘图函数的使用 2.利用上述绘图函数实现数据可视化 二.实验内容: 1.练习python中柱状图.条形图绘图函数的用法,掌握相关参数的概念 2.根据步骤一绘图函数要求,处理实验数据 3.根据步骤二得到的实验数据,绘制柱状图.条形图 4.练习如何通过调整参数使图片呈现不同效果,例如颜色.图例位置.背景网格.坐标轴刻度和标记等 三.实验过程(附结果截图): 1. 练习python中柱状图.条形图绘图函数的用法,掌握相关参数的概念 (1)练习绘制条形

  • R语言绘图数据可视化Ridgeline plot山脊图画法

    目录 Step1. 绘图数据的准备 Step2. 绘图数据的读取 Step3. 绘图所需package的安装.调用 Step4. 绘图 调整透明度 更改顺序 更改线条形状 今天给大家介绍一下Ridgeline plot(山脊图)的画法. 作图数据如下: Step1. 绘图数据的准备 首先要把你想要绘图的数据调整成R语言可以识别的格式,建议大家在excel中保存成csv格式. Step2. 绘图数据的读取 data<-read.csv("your file path", heade

  • python数据可视化之日期折线图画法

    本文实例为大家分享了python日期折线图画法的具体代码,供大家参考,具体内容如下 引入 什么是折线图: 折线图是排列在工作表的列或行中的数据可以绘制到折线图中.折线图可以显示随时间(根据常用比例设置)而变化的连续数据,因此非常适用于显示在相等时间间隔下数据的趋势.在折线图中,类别数据沿水平轴均匀分布,所有值数据沿垂直轴均匀分布. 以上引用自 百度百科 ,简单来说一般折线图 是以时间作为 X 轴 数据 作为 Y轴,这当然不是固定的,是可以自行设置的. 话不多说~ 进入正题 第一种画法: impo

  • Python数据可视化:箱线图多种库画法

    概念 箱线图通过数据的四分位数来展示数据的分布情况.例如:数据的中心位置,数据间的离散程度,是否有异常值等. 把数据从小到大进行排列并等分成四份,第一分位数(Q1),第二分位数(Q2)和第三分位数(Q3)分别为数据的第25%,50%和75%的数字. 四分位间距(Interquartilerange(IQR))=上分位数(upper quartile)-下分位数(lower quartile) 箱线图分为两部分,分别是箱(box)和须(whisker).箱(box)用来表示从第一分位到第三分位的数

  • Python可视化学习之seaborn绘制矩阵图详解

    目录 本文内容速览 1.绘图数据准备 2.seaborn.pairplot 加上分类变量 修改调色盘 x,y轴方向选取相同子集 x,y轴方向选取不同子集 非对角线散点图加趋势线 对角线上的四个图绘制方式 只显示网格下三角图形 图形外观设置 3.seaborn.PairGrid(更灵活的绘制矩阵图) 每个子图绘制同类型的图 对角线和非对角线分别绘制不同类型图 对角线上方.对角线.对角线下方分别绘制不同类型图 其它一些参数修改 本文内容速览 1.绘图数据准备 还是使用鸢尾花iris数据集 #导入本帖

随机推荐