Python-数据可视化Seaborn

Seaborn

seabornmatplotlib一样,也是Python进行数据可视化分析的重要第三方包。但seaborn是在 matplotlib的基础上进行了更高级的API封装,使得作图更加容易,图形更加漂亮。

我并不认为seaborn可以替代matplotlib。虽然seaborn可以满足大部分情况下的数据分析需求,但是针对一些特殊情况,还是需要用到matplotlib的。换句话说,matplotlib更加灵活,可定制化,而seaborn像是更高级的封装,使用方便快捷。

应该把seaborn视为matplotlib的补充,而不是替代物。

Seaborn学习内容

seaborn的学习内容主要包含以下几个部分:

  1. 风格管理

    • 绘图风格设置
    • 颜色风格设置
  2. 绘图方法
    • 数据集的分布可视化
    • 分类数据可视化
    • 线性关系可视化
  3. 结构网格
    • 数据识别网格绘图

风格管理 - 绘图风格设置

def sinplot(flip=1):
    x = np.linspace(0,14,100)
    for i in range(1,7):
        plt.plot(x,np.sin(x+i*0.5) * (7-i) * flip)    plt.show()

if __name__ == ‘__main__‘:
    sns.set()  # 使用seaborn默认的风格
    sinplot()

# 直接调用sinplot函数是使用的plt绘图
# 先调用sns.set()之后再调用sinplot,则使用的是seaborn的默认风格绘图。

下面第一个是plt的默认绘图,第二个为使用sns的默认风格绘图

   

Seaborn 将 matplotlib 的参数划分为两个独立的组合。第一组是设置绘图的外观风格的,第二组主要将绘图的各种元素按比例缩放的,以至可以嵌入到不同的背景环境中。

操控这些参数的接口主要有两对方法:

  • 控制风格:axes_style()set_style()
  • 缩放绘图:plotting_context()set_context()

每对方法中的第一个方法(axes_style()plotting_context())会返回一组字典参数,而第二个方法(set_style()set_context())会设置matplotlib的默认参数。

Seaborn的五种绘图风格

有五种seaborn的风格,它们分别是:darkgridwhitegriddarkwhiteticks。它们各自适合不同的应用和个人喜好。默认的主题是darkgrid,分别设置如下:

def sinplot(flip=1):
    sns.set_style("whitegrid")
    data = np.random.normal(size=(20,6)) + np.arange(6) /2
    sns.boxplot(data=data)
    plt.show()

    sns.set_style("dark")
    data = np.random.normal(size=(20, 6)) + np.arange(6) / 2
    sns.boxplot(data=data)
    plt.show()

    sns.set_style("white")
    data = np.random.normal(size=(20, 6)) + np.arange(6) / 2
    sns.boxplot(data=data)
    plt.show()

    sns.set_style("ticks")
    data = np.random.normal(size=(20, 6)) + np.arange(6) / 2
    sns.boxplot(data=data)
    # 去掉x和y轴的对面轴线 offset=10 图距离坐标轴的距离
    # left =True 隐藏掉左边的轴线
    sns.despine(offset=10,left=True)

在子图中设置不同的风格(在with语句里面的是一种风格,在with语句外面的是另外一种风格)

white 和 ticks两个风格都能够移除顶部和右侧的不必要的轴脊柱。通过matplotlib参数是做不到这一点的,但是你可以使用seaborndespine()方法来移除它们

你也可以在一个with语句中使用axes_style()方法来临时的设置绘图参数。这也允许你用不同风格的轴来绘图,可以在子图中分分别设置不同的绘图风格:

def sinplot(flip=1):
    sns.set_style("ticks")
    data = np.random.normal(size=(20, 6)) + np.arange(6) / 2
    sns.boxplot(data=data)
    # 去掉x和y轴的对面轴线 offset=10 图距离坐标轴的距离
    # left =True 隐藏掉左边的轴线
    sns.despine(offset=10,left=True)

if __name__ == ‘__main__‘:
    with sns.axes_style("darkgrid"):
        plt.subplot(211)
        sinplot()
    plt.subplot(212)
    sinplot(-1)
    plt.show()

颜色风格设置

Seaborn的使用中,是可以针对数据类型而选择合适的颜色,并且使用选择的颜色进行可视化,节省了大量的可视化的颜色调整工作。

对于不连续的外观颜色设置而言,最重要的函数恐怕要属color_palette了。这个函数拥有许多方法,让你可以随心所欲的可以生成各种颜色。并且,它可以被任何有palette参数的函数在内部进行使用(palette的中文意思是 "调色板")。

关于这个函数有几个点需要知道一下:

  • color_palette函数可以接受任何seaborn或者matplotlib颜色表中颜色名称(除了jet),也可以接受任何有效的matplotlib形式的颜色列表(比如RGB元组,hex颜色代码,或者HTML颜色名称)。
  • 这个函数的返回值总是一个由RGB元组组成的列表,无参数调用color_palette函数则会返回当前默认的色环的列表。
  • 还有一个相应的函数,是set_palette,它接受与color_palette一样的参数,并会对所有的绘图的默认色环进行设置。当然,你也可以在with语句中使用color_palette来临时的改变默认颜色。

有三种通用的color palette可以使用,它们分别是:qualitativesequentialdiverging

1. 分类色板(quanlitative)

Qualitative调色板,也可以说成是 类型 调色板,因为它对于分类数据的显示很有帮助。当你想要区别 不连续的且内在没有顺序关系的 数据时,这个方式是最好的。

当导入seaborn时,默认的色环就被改变成一组包含6种颜色的调色板,它使用了标准的matplolib色环,为了让绘图变得更好看一些。

def sinplot():
    current_palette = sns.color_palette()
    sns.palplot(current_palette)

有6种不同的默认主题,它们分别是:deepmutedpastelbirghtdarkcolorblind

themes = [‘deep‘, ‘muted‘, ‘pastel‘, ‘bright‘, ‘dark‘, ‘colorblind‘]
for theme in themes:
    current_palette = sns.color_palette(theme)
    sns.palplot(current_palette)

当你有超过6种类型的数据要区分时,最简单的方法就是 在一个色圈空间内使用均匀分布的颜色。这也是当需要使用更多颜色时大多数seaborn函数的默认方式。

最常用的方法就是使用 hls 色空间,它是一种简单的RGB值的转换。

sns.palplot(sns.color_palette("hls",8))  #hls 是一种颜色空间,将划分集中不同的颜色
plt.show()    # 会输出8中颜色

使用hls划分不同的颜色,并给图形上色

def sinplot(flip=1):
    sns.set_style("whitegrid")
    data = np.random.normal(size=(20,8)) + np.arange(8) /2
    # 输出为8个盒图,每一种取一种不同的颜色,颜色使用hls平均截取出来的颜色,根据模块设定颜色个数
    sns.boxplot(data=data,palette=sns.color_palette("hls",8))
    plt.show()

if __name__ == ‘__main__‘:
    sinplot()

2. 连续色板(sequential)

调色板的第二大类被成为 "顺序",这种调色板对于有从低(无意义)到高(有意义)范围过度的数据非常适合。尽管有些时候你可能想要在连续色板中使用不连续颜色,但是更通用的情况下是连续色板会作为颜色表在 kdeplot() 或者 corrplot()或是一些 matplotlib 的函数中使用。

对于连续的数据,最好是使用那些在色调上有相对细微变化的调色板,同时在亮度和饱和度上有很大的变化。这种方法将自然地将数据中相对重要的部分成为关注点。

Color Brewer 的字典中就有一组很好的调色板。它们是以在调色板中的主导颜色(或颜色)命名的。

def sinplot():
    sns.palplot(sns.color_palette("Blues"))
    plt.show()

就像在matplotlib中一样,如果您想要翻转渐变,您可以在面板名称中添加一个_r后缀

def sinplot():
    sns.palplot(sns.color_palette("Blues_r"))  #参数可在函数报错中查看
    plt.show()

数据集分布可视化

当处理一个数据集的时候,我们经常会想要先看看特征变量是如何分布的。这会让我们对数据特征有个很好的初始认识,同时也会影响后续数据分析以及特征工程的方法

这里的数据集是随机产生的分布数据,由 numpy 生成,数据类型是ndarray。当然,pandas 的 Series 数据类型也是可以使用的,比如我们经常需要从 DataFrame 表中提取某一特征(某一列)来查看分布情况。

绘制单变量分布

在 seaborn 中,快速观察单变量分布的最方便的方法就是使用 distplot() 函数。默认会使用柱状图(histogram)来绘制,并提供一个适配的核密度估计(KDE)。

def sinplot(flip=1):
    x = np.random.normal(size=100)
    sns.distplot(x,kde=True ,bins=20)   # 可以设置kde为True或者False来启用或者禁用柱状图的曲线
    plt.show()
if __name__ == ‘__main__‘:
    sinplot()

直方图(histograms

直方图是比较常见的,并且在 matplotlib 中已经存在了 hist 函数。直方图在横坐标的数据值范围内均等分的形成一定数量的数据段(bins),并在每个数据段内用矩形条(bars)显示y轴观察数量的方式,完成了对的数据分布的可视化展示。

为了说明这个,我们可以移除 kde plot,然后添加 rug plot(在每个观察点上的垂直小标签)。当然,你也可以使用 rug plot 自带的 rugplot() 函数,但是也同样可以在 distplot 中实现:

def sinplot(flip=1):
    x = np.random.normal(size=100)
    sns.distplot(x,kde=False,bins=20,rug=True)
    plt.show()

绘制双变量分布

对于双变量分布的可视化也是非常有用的。在 seaborn 中最简单的方法就是使用 joinplot() 函数,它能够创建一个多面板图形来展示两个变量之间的联合关系,以及每个轴上单变量的分布情况。

Scatterplots

双变量分布最熟悉的可视化方法无疑是散点图了,在散点图中每个观察结果以x轴和y轴值所对应的点展示。你可以用 matplotlib 的 plt.scatter 函数来绘制一个散点图,它也是jointplot()函数显示的默认方式。

def sinplot(flip=1):
    data = np.random.random(100).reshape(50,2)
    df = pd.DataFrame(data,columns=[‘x‘,‘y‘])
    sns.jointplot(x="x",y="y",data=df)  # 画出两个变量之间的关系,并且画出单变量的直方图
    plt.show()
if __name__ == ‘__main__‘:
    sinplot()

Hexbin plots

直方图 histogram 的双变量类似图被称为 “hexbin” 图,因为它展示了落在六角形箱内的观测量。这种绘图对于相对大的数据集效果最好。它可以通过 matplotlib 的 plt.hexbin 函数使用,也可以作为 jointplot 的一种类型参数使用。它使用白色背景的时候视觉效果最好。

当某一块数据密度很大的时候,加深其颜色(一般当数据量较大的时候使用)

def sinplot(flip=1):
    data = np.random.random(1000).reshape(500,2)
    df = pd.DataFrame(data,columns=[‘x‘,‘y‘])
    with sns.axes_style("white"):
        sns.jointplot(x="x",y="y",kind="hex",data=df,color=‘k‘)  #kind="hex" 可以设置数据密度较大是,此处的颜色较深
    plt.show()
if __name__ == ‘__main__‘:
    sinplot()

可视化数据集成对关系

为了绘制数据集中多个成对的双变量,你可以使用 pairplot() 函数。这创建了一个轴矩阵,并展示了在一个 DataFrame 中每对列的关系。默认情况下,它也绘制每个变量在对角轴上的单变量。

多个变量之间分析每两个变量之间的关系

def sinplot(flip=1):
    iris = sns.load_dataset("iris")  # iris为seaborn的内置数据集,数据有四个特征
    # pairplot 会绘制数据集中的每一种变量之间的关系图
    # 对角线上是每个变量,其他的图为每个变量和另外一个变量的关系散点图
    sns.pairplot(iris)

    plt.show()
if __name__ == ‘__main__‘:
    sinplot()

绘制回归图形

regplot()和implot()都可以绘制回归关系,推荐使用regplot()   查看基金的增长关系回归分析

def sinplot():    tips = sns.load_dataset("tips")  # 内置数据集,数据集为df类型

    #使用regplot绘制回归分析图,拟合出一条最能反映特点的直线    #x_jitter 在原始数据集的基础上增加或者减少一个小范围值,可以更好的绘制出回归模型    sns.regplot(x="total_bill",y="tip",data=tips,x_jitter=0.05)

    plt.show()

if __name__ == ‘__main__‘:    sinplot()

对有重叠数据分析时,可以将数据稍作偏移,可以更好的观察结果

def sinplot():   tips = sns.load_dataset("tips")  # 内置数据集,数据集为df类型

    #在数据分析时,有时候可能有大量重复数据,可使用jetter进行些许偏移数据,可以有更好的效果
    # 分析星期和消费之间的关系,星期有大量重复值,使用jitter=True可以将数据稍作偏移,以便更好的观察效果   sns.stripplot(x="day",y="total_bill",data=tips,jitter=True)

    plt.show()

if __name__ == ‘__main__‘:
    sinplot()

def sinplot():
    tips = sns.load_dataset("tips")  # 内置数据集,数据集为df类型

    #在数据分析时,有时候可能有大量重复数据,可使用jetter进行些许偏移数据,可以有更好的效果
    sns.stripplot(x="day",y="total_bill",data=tips,jitter=True)
    sns.swarmplot(x="day",y="total_bill",data=tips)

    plt.show()

if __name__ == ‘__main__‘:
    sinplot()

原文地址:https://www.cnblogs.com/lxbmaomao/p/10541113.html

时间: 2024-08-01 16:09:34

Python-数据可视化Seaborn的相关文章

Python数据可视化—seaborn简介和实例

Seaborn其实是在matplotlib的基础上进行了更高级的API封装,从而使得作图更加容易,在大多数情况下使用seaborn就能做出很具有吸引力的图.这里实例采用的数据集都是seaborn提供的几个经典数据集,dataset文件可见于Github.本博客只总结了一些,方便博主自己查询,详细介绍可以看seaborn官方API和example gallery,官方文档还是写的很好的.原文链接:https://blog.csdn.net/qq_34264472/article/details/5

【数据科学】Python数据可视化概述

注:很早之前就打算专门写一篇与Python数据可视化相关的博客,对一些基本概念和常用技巧做一个小结.今天终于有时间来完成这个计划了! 0. Python中常用的可视化工具 Python在数据科学中的地位,不仅仅是因为numpy, scipy, pandas, scikit-learn这些高效易用.接口统一的科学计算包,其强大的数据可视化工具也是重要组成部分.在Python中,使用的最多的数据可视化工具是matplotlib,除此之外还有很多其他可选的可视化工具包,主要包括以下几大类: matpl

Python数据可视化的四种简易方法

摘要: 本文讲述了热图.二维密度图.蜘蛛图.树形图这四种Python数据可视化方法. 数据可视化是任何数据科学或机器学习项目的一个重要组成部分.人们常常会从探索数据分析(EDA)开始,来深入了解数据,并且创建可视化确实有助于让问题更清晰和更容易理解,尤其是对于那些较大的高维度数据集.在项目结束的时候,能够以清晰的.简洁的和令人信服的方式呈现最终结果,这是非常重要的,让你的用户能够理解和明白. 你可能已经看过了我之前的文章<5种快速和简单的Python数据可视化方法(含代码)>(5 Quick

Python 数据可视化工具以及数据分析开发架构

Python 数据可视化进阶 Python数据可视化教程:基于 plotly 动态可视化绘图 ?https://edu.51cto.com/sd/4bff8 ? Python数据可视化教程 Seaborn ?https://edu.51cto.com/sd/19627 Python 数据分析实战 视频课程https://edu.51cto.com/sd/63225 Python数据可视化: pyecharts实战 ????? pyecharts 是一个用于生成 Echarts 图表的类库.Ech

Python数据可视化编程实战——导入数据

1.从csv文件导入数据 原理:with语句打开文件并绑定到对象f.不必担心在操作完资源后去关闭数据文件,with的上下文管理器会帮助处理.然后,csv.reader()方法返回reader对象,通过该对象遍历所读取文件的所有行. 1 #!/usr/bin/env python 2 3 import csv 4 5 filename = 'ch02-data.csv' 6 7 data = [] 8 try: 9 with open(filename) as f: 10 reader = csv

分享《Python数据可视化编程实战》中文版PDF+英文版PDF+源代码

下载:https://pan.baidu.com/s/17-gPTIYJsHc4Xn_f5sVYXw <Python数据可视化编程实战>中文版PDF+英文版PDF+源代码 中文版PDF,带目录和书签:英文版PDF,带目录和书签:中英文两版可以对比学习.配套源代码:经典书籍,讲解详细:中文版如图: 原文地址:http://blog.51cto.com/3215120/2311995

《Python数据可视化编程实战》中文版PDF+英文版PDF+源代码

资源链接:https://pan.baidu.com/s/1XqN3YBmL5Y1jknUbaiv-Qg<Python数据可视化编程实战>中文版PDF+英文版PDF+源代码中文版PDF,带目录和书签:英文版PDF,带目录和书签:中英文两版可以对比学习.配套源代码:经典书籍,讲解详细:中文版如图: 原文地址:http://blog.51cto.com/14063572/2318482

分享《Python数据可视化编程实战》+PDF+源码+Igor Milovanovic+颛清山

下载:https://pan.baidu.com/s/1R6n3aE2_jIGnOmFR7jKx0A 更多分享资料:http://blog.51cto.com/14087171 <Python数据可视化编程实战>中文版PDF+英文版PDF+源代码 中文版PDF,带目录和书签:英文版PDF,带目录和书签:中英文两版可以对比学习.配套源代码:经典书籍,讲解详细:中文版如图: 原文地址:http://blog.51cto.com/14087171/2321650

python -- 数据可视化(二)

python -- 数据可视化 Matplotlib 绘图 1.图形对象(图形窗口) mp.figure(窗口名称, figsize=窗口大小, dpi=分辨率, facecolor=颜色) 如果"窗口名称"是第一次出现,那么就创建一个新窗口,其标题栏显示该名称,如果"窗口名称"已经出现过,那么不再创建新窗口,而只是将与该名称相对应的窗口设置为当前窗口.所谓当前窗口,就是接受后续绘图操作的窗口. mp.title(标题文本, fontsize=字体大小) mp.xl

python数据可视化:pyecharts

发现了一个做数据可视化非常好的库:pyecharts.非常便捷好用,大力推荐!! 官方介绍:pyecharts 是一个用于生成 Echarts 图表的类库.Echarts 是百度开源的一个数据可视化 JS 库.用 Echarts 生成的图可视化效果非常棒,pyecharts 是为了与 Python 进行对接,方便在 Python 中直接使用数据生成图. 中文教程也非常具体:https://pyecharts.org/#/zh-cn/quickstart?id=%e5%a6%82%e4%bd%95