python seaborn教程_Seaborn官方教程中文教程(一)

本文翻译seaborn官方文档,探讨seaborn的relplot、scatterplot和lineplot函数,用于统计分析数据关系。通过实例展示了如何利用散点图、折线图进行数据可视化,包括色调、尺寸、风格等参数的使用,以及如何通过语义映射绘制数据子集。
摘要由CSDN通过智能技术生成

seaborn官方文档翻译

统计分析是理解数据集中各个变量彼此关系的重要过程,通过统计分析,我们就可以洞见数据中隐藏的趋势和规律,更好的揭示数据之间的关系。

在本教程中我们主要讨论三种seaborn函数:

relplot(kind) 画图函数kind参数可以为"scatter"或者"line"

scatterplot() 散点图函数

lineplot() 折线图函数

不论数据结构多么复杂,seaborn的这些函数可以很简明的将数据展示出来。比如在二维空间中,seaborn可以在图中通过色调(hue)、尺寸(size)、风格(style)等方式来展示三维数据结构。具体怎么使用请看继续往下学习

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

import seaborn as sns

#让jupyter notebook的Cell可以将多个变量显示出来。

from IPython.core.interactiveshell import InteractiveShell

InteractiveShell.ast_node_interactivity = 'all'

sns.set(style="darkgrid")

使用散点图展现相关变量

散点图是统计可视化方法中的中流砥柱。可以使用relplot(kind='scatter')或者scatter()作图

tips = pd.read_csv('tips.csv')

#tips数据集中包含total_bill、tip、sex、smoker、day、time、size这些字段

tips.head()

sns.relplot(x="total_bill",

y="tip",

data=tips)

#sns.scatterplot(x="total_bill", y="tip", data=tips) #效果等同于relplot函数

style样式

当有第三个变量参与绘图,在seaborn中可以使用style(类别样式参数),因为类别本身也是带有信息的。

sns.relplot(x="total_bill",

y="tip",

style="smoker",

data=tips)

hue色标

但是上图看着smoker类目,No和yes很难在图中区分。如果能有色调的区别,更容易肉眼区分开来。这里使用色调参数 hue

sns.relplot(x="total_bill",

y="tip",

hue="smoker",

style="smoker",

data=tips)

当然我们也可以在图中对四种变量进行统计性分析。四个变量分别是total_bill、tip、smoker、time

sns.relplot(x="total_bill",

y="tip",

hue="smoker",

style="time",

data=tips)

palette调色板

在两个例子中,我们可以自定义调色板(color palette),这样做有很多options。在这里,我们使用字字符串接口自定义 顺序调色板。

sns.relplot(x="total_bill",

y="tip",

hue="size",

#ch变化范围(2.5,-0.2),从浅色(大于0)到深色(小于0)

#色调的明暗程度dark取值范围(0,1),dark值越大散点的颜色越浅

palette="ch:2.5,-0.2,dark=0.1",

data=tips)

size尺寸

对于三个变量的可视化,其实还可以使用尺寸size参数来可视化。

sns.relplot(x='total_bill',

y='tip',

size='size',

data=tips)

size还可以设置范围

sns.relplot(x='total_bill',

y='tip',

size='size',

sizes=(15, 200),

data=tips)

散点图使用很方便,但这并不是万能通用的可视化方法。例如,我们想探索某些数据集中的某个变量随着时间的变化趋势,或者该变量是连续型变量,此时使用lineplot()更好。或者relplot(kind='line')。

我们伪造一份随着时间变化的数据

data = dict(time=np.arange(500),

value=np.random.randn(500).cumsum())

df = pd.DataFrame(data)

g = sns.relplot(x="time",

y="value",

kind="line",

data=df)

g.fig.autofmt_xdate()

sort参数

因为lineplot()假定我们绘制的图因变量是y,自变量是x。绘图前默认从x轴方向对数据进行排序。但是,这种情况是可以被禁用的:

df = pd.DataFrame(np.random.randn(500, 2).cumsum(axis=0),

columns=["x", "y"])

sns.relplot(x="x",

y="y",

sort=True,

kind="line",

data=df)

sns.relplot(x="x",

y="y",

sort=False,

kind="line",

data=df)

03-聚合并表示不确定性

更复杂的数据集将对x变量的相同值有多个观测值。seaborn中默认通过绘制x的平均值和x的95%置信区间来聚合每个x的多个测量值:

fmri = pd.read_csv('fmri.csv')

fmri.head()

sns.relplot(x='timepoint',

y='signal',

kind='line',

data=fmri)

置信区间ci

使用bootstrapping来计算置信区间(confidence intervals),这对于较大的数据集来说会是时间密集型的。因此我们可以对该方法采用禁用。参数ci=None表示禁用

sns.relplot(x='timepoint',

y='signal',

kind='line',

ci=None,

data=fmri)

另一个好的选择,特别是对于更大的数据,是通过绘制标准偏差sd而不是置信区间来表示每个时间点的分布范围。ci参数设置为'sd'

sns.relplot(x='timepoint',

y='signal',

kind='line',

ci='sd',

data=fmri)

estimator

要完全剔除聚合效应,请将estimator参数设置为None。当数据在每个点上有多个观察值时,这可能会产生奇怪的效果。

sns.relplot(x='timepoint',

y='signal',

kind='line',

estimator=None,

data=fmri)

使用语义映射绘制数据子集

Plotting subsets of data with semantic mappings

lineplot()拥有与relplot()、scatterplot()类似的灵活性:同样可以借助色调hue、尺寸size和样式style将三种变量展示在二维图表中。因此我们不用停下来思考如何使用matplotlib对点线具体的参数进行设置。

使用lineplot()也会诊断数据如何借助语义进行聚合。例如在制图时,加入色调hue会将图表分为两条曲线以及错误带(error band),每种颜色对应的指示出数据的子集:

色调hue

下面我们看看hue具体例子

fmri = pd.read_csv('fmri.csv')

fmri.sample(5)

sns.relplot(x='timepoint',

y = 'signal',

hue='event',

kind='line',

data=fmri)

样式style

改变制图中的样式

sns.relplot(x='timepoint',

y = 'signal',

hue='event',

style='event',

kind='line',

data=fmri)

注意上面代码中hue和style参数都是一个变量,所以绘制的图与之前生成的图变动不大。只是cue类曲线从实线变成虚线。

现在hue和style参数不同后,我们在运行试试

sns.relplot(x='timepoint',

y = 'signal',

hue='region',

style='event',

kind='line',

data=fmri)

与散点图一样,要谨慎使用多个语义制作线图。 虽然这样操作有时候提供了信息,但图表更难解读。 但即使您只检查一个附加变量的变化,更改线条的颜色和样式也很有用。 当打印成黑白或有色盲的人观看时,这可以使情节更容易理解:

sns.relplot(x='timepoint',

y = 'signal',

hue='event',

style='event',

kind='line',

data=fmri)

units

当您使用重复测量数据(即,您有多次采样的单位)时,您还可以单独绘制每个采样单位,而无需通过语义区分它们。这可以避免使图例混乱:

sns.relplot(x="timepoint",

y="signal",

hue="region",

units="subject",

estimator=None,

kind="line",

data=fmri.query("event == 'stim'"))

lineplot()中默认的色彩映射和图例处理还取决于色调hue是分类型数据还是数字型数据:

dots = pd.read_csv('dots.csv').query("align == 'dots'")

dots.head()

sns.relplot(x="time",

y="firing_rate",

hue="coherence",

style="choice",

kind="line",

data=dots)

调色板palette

可能会发生这样的情况:即使色调变量palette是数字,它也很难用线性色标表示。 这就是这种情况,其中色调变量hue以对数方式缩放。 您可以通过传递列表或字典为每一行提供特定的颜色值:

#n_colors值与coherence种类数相等

palette = sns.cubehelix_palette(light=.8, n_colors=6)

sns.relplot(x="time",

y="firing_rate",

hue="coherence",

style="choice",

palette=palette,

kind="line", data=dots);

hue_norm

或者您可以更改色彩映射的规范化方式

from matplotlib.colors import LogNorm

sns.relplot(x="time",

y="firing_rate",

hue="coherence",

hue_norm=LogNorm(),

style="choice",

kind="line",

data=dots);

size

改变线条的粗细

sns.relplot(x='time',

y='firing_rate',

size='coherence',

style='choice',

kind='line',

data=dots)

绘制date数据

df = pd.DataFrame(dict(time=pd.date_range("2017-1-1", periods=500),

value=np.random.randn(500).cumsum()))

df.head()

g = sns.relplot(x="time", y="value", kind="line", data=df)

g.fig.autofmt_xdate()

多图展现更多信息

当你想要理解两个变量之间的关系如何依赖于多个其他变量时呢?

最好的方法可能是制作一个以上的图。 因为relplot()基于FacetGrid,所以这很容易做到。 要显示新增变量的影响,而不是将其分配给绘图中的一个语义角色,请使用它来“构思”(facet)可视化。 这意味着您可以创建多个轴并在每个轴上绘制数据的子集:

tips = pd.read_csv('tips.csv')

sns.relplot(x="total_bill",

y="tip",

hue="smoker",

col="time", #time有几种值,就有几列图

data=tips);

sns.relplot(x="timepoint",

y="signal",

hue="subject",

col="region", #region有几种值,就有几列图

row="event", #event有几种值,就有几行图

height=3,

kind="line",

estimator=None,

data=fmri);

sns.relplot(x="timepoint",

y="signal",

hue="event",

style="event",

col="subject",

col_wrap=3, #显示的图片的行数

height=3,

aspect=1, #长宽比,该值越大图片越方。

linewidth=2.5,

kind="line",

data=fmri.query("region == 'frontal'"));

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值