seaborn同matplotlib一样,也是Python进行数据可视化分析的重要第三方包。但seaborn是在 matplotlib的基础上进行了更高级的API封装,使得作图更加容易,图形更加漂亮。
参数 特别多的几十种参数
虽然seaborn可以满足大部分情况下的数据分析需求,但是针对一些特殊情况,还是需要用到matplotlib的。换句话说,matplotlib更加灵活,可定制化,而seaborn像是更高级的封装,使用方便快捷。
seaborn学习内容:
seaborn学习内容主要包含以下几个部分:
风格管理
绘图风格设置 颜色风格设置
绘图方法
1. 数据集的分布可视化
2. 分类数据可视化
3. 线性关系可视化
数据识别网络绘图
import seaborn as sns
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
# 通过代码绘制图的时候直接把图显示出来 用在juyper notebook 中作用是当你调用matplotlib.pyplot的绘图函数plot()进行绘图的时候
# 或者生成一个figure画布的时候,可以直接在你的pychon console里面生成图像
%matplotlib inline
def sinplot(flip=1):
# 在1-14之间找到100个点
x=np.linspace(0,14,100)
print(x.shape)
for i in range(1,7):
# 绘制6条线 (7-i)*flip振幅 正弦×几 就是-几到几之间
plt.plot(x,np.sin(x+i*0.5)*(7-i)*flip)
print(type(i))#int
sinplot()
# plt.show()
# 使用seaborn默认的风格来绘制转换为seaborn默认绘图,可以简单的用set()方法。
sns.set()
sinplot()
图二
Seaborn 将 matplotlib 的参数划分为两个独立的组合。第一组是设置绘图的外观风格的,第二组主要将绘图的各种元素按比例缩放的,以至可以嵌入到不同的背景环境中。
操控这些参数的接口主要有两对方法:
控制风格:axes_style(), set_style() 缩放绘图:plotting_context(), set_context() 每对方法中的第一个方法(axes_style(), plotting_context())会返回一组字典参数,而第二个方法(set_style(), set_context())会设置matplotlib的默认参数。
Seaborn的五种绘图风格
有五种seaborn的风格,它们分别是:darkgrid, whitegrid, dark, white, ticks。它们各自适合不同的应用和个人喜好。默认的主题是darkgrid。
sns.set_style('whitegrid')
sinplot()
sns.set_style('dark')
sinplot()
sns.set_style('white')
sinplot()
sns.set_style('ticks')
sinplot()
white和ticks两种风格都可以移除顶部和右侧的不必要的轴脊柱。使用matplotlib是做不到这一点的,但是你可以使用seaborn的despine()方法来移除它们。
sns.set_style('whitegrid')
sinplot()
# 用despine()移除上边和右边的轴去掉
sns.despine()
一些绘图也可以针对数据将轴脊柱进行偏置,当然也是通过调用despine()方法来完成。而当刻度没有完全覆盖整个轴的范围时,trim参数可以用来限制已有脊柱的范围。
sinplot()
# offset是绘图偏移周的距离
sns.despine(offset=100)
虽然来回切换风格很容易,但是你也可以在一个with语句中使用axes_style()方法来临时的设置绘图参数。这也允许你用不同风格的轴来绘图:
# 单独为子图指定样式风格
with sns.axes_style("white"):
# 当前风格的图形
plt.subplot(211)#两行一列的子图 相当于2,2,1
sinplot()
sns.set_style("whitegrid")
plt.subplot(212)
sinplot(-1)
sns.set()
如果你想定制化seaborn风格,你可以将一个字典参数传递给axes_style()和set_style()的参数rc。而且你只能通过这个方法来覆盖风格定义中的部分参数。
如果你想要看看这些参数都是些什么,可以调用这个方法,且无参数,这将会返回下面的设置:
sns.axes_style()
'''
{'axes.axisbelow': True,
'axes.edgecolor': 'white',
'axes.facecolor': '#EAEAF2',
'axes.grid': True,
'axes.labelcolor': '.15',
'axes.linewidth': 0.0,
'figure.facecolor': 'white',
'font.family': ['sans-serif'],
'font.sans-serif': ['Arial',
'DejaVu Sans',
'Liberation Sans',
'Bitstream Vera Sans',
'sans-serif'],
'grid.color': 'white',
'grid.linestyle': '-',
'image.cmap': 'rocket',
'legend.frameon': False,
'legend.numpoints': 1,
'legend.scatterpoints': 1,
'lines.solid_capstyle': 'round',
'text.color': '.15',
'xtick.color': '.15',
'xtick.direction': 'out',
'xtick.major.size': 0.0,
'xtick.minor.size': 0.0,
'ytick.color': '.15',
'ytick.direction': 'out',
'ytick.major.size': 0.0,
'ytick.minor.size': 0.0}
'''
#whitegrid风格axes.axes.edgecolor表格颜色
sns.set_style("whitegrid",{'axes.edgecolor':"0.9"})
# print(help(sns))
sinplot()
绘图元素比例 我们可以通过一套参数控制绘图元素的比例。 首先,我们通过set()方法重置默认的参数:
sns.set()
plt.figure(figsize=(10,6))#子图的操作 宽10英尺 高6英尺
sinplot()
有四个预置的环境,按大小从小到大排列分别为:paper, notebook, talk, poster。其中,notebook是默认的。
# 内置绘制的风格大小 比方说萧条大小 粗细有区别
sns.set_context('paper')
plt.figure(figsize=(8,6))#子图的操作 宽8英尺 高6英尺
sinplot()
sns.set_context('talk')
plt.figure(figsize=(8,6))#子图的操作 宽8英尺 高6英尺
sinplot()
# 指定另外一种风格 线条粗细一类的
sns.set_context('notebook',font_scale=1.5,rc={"lines.wliewidth":2.5})
sinplot()
在Seaborn的使用中,是可以针对数据类型而选择合适的颜色,并且使用选择的颜色进行可视化,节省了大量的可视化的颜色调整工作。
对于不连续的外观颜色设置而言,最重要的函数恐怕要属color_palette了。这个函数拥有许多方法,让你可以随心所欲的可以生成各种颜色。并且,它可以被任何有palette参数的函数在内部进行使用(palette的中文意思是 “调色板”)。
关于这个函数有几个点需要知道一下:
color_palette函数可以接受任何seaborn或者matplotlib颜色表中颜色名称(除了jet),也可以接受任何有效的matplotlib形式的颜色列表(比如RGB元组,hex颜色代码,或者HTML颜色名称)。 这个函数的返回值总是一个由RGB元组组成的列表,无参数调用color_palette函数则会返回当前默认的色环的列表。
# 调色板
# 调色板很重要
# current_palette()能传人任何Matplotlib 所支持的颜色 不写参数则默认颜色
# set_palette() 设置索引图的颜色
# 分类色板
current_palette = sns.color_palette()
print("current_palette",current_palette)
print("current_palette数据类型",type(current_palette))#
sns.palplot(current_palette)
有6种不同的默认主题,它们分别是:deep,muted,pastel,birght,dark,colorblind。
圆形画板 当你有超过6种类型的数据要区分时,最简单的方法就是 在一个色圈空间内使用均匀分布的颜色(这样的色调回保持亮度和饱和度不变)。 这也是大多数的 当需要使用比当前默认颜色循环中 设置更多颜色时大多数seaborn函数的默认方式。 最常用的方法是使用 hls的颜色空间 ,它可以让你控制 hls 这个是RGB值的一个简单转换 颜色的亮度和饱和度。
thems=["deep","muted","pastel","bright","dark","colorblind"]
for theme in thems:
current_palette=sns.color_palette(theme)
sns.palplot(current_palette)
在一个色圈空间内使用均匀分布的颜色。这也是当需要使用更多颜色时大多数seaborn函数的默认方式。
最常用的方法就是使用 hls 色空间,它是一种简单的RGB值的转换。
# 传出来的是8种颜色 如果想绘制8分类的图 就传8
sns.palplot(sns.color_palette('hls', 8))
# 传出来的是8种颜色 如果想绘制8分类的图 就传16
sns.palplot(sns.color_palette('hls', 16))
# 随机早点数据 然后在绘制的时候指定的颜色个数 需要绘制的
# 个数来决定多少个颜色值
# 自带的数据源
data=sns.load_dataset("fmri")
print("data.head()",data.head())
print("data.head()数据类型",type(data.head()))#DataFrame
#sns.barplot条形图 x轴标题timepoint y轴标题signal data数据源 palette指定颜色
sns.barplot(x="timepoint",y="signal",data=data,palette=sns.color_palette("hls",12))
hls_palette 函数,它可以让你控制 hls 颜色的亮度和饱和度。
l-亮度 lightness s-饱和 saturation
sns.palplot(sns.hls_palette(8, l=0.3, s=0.8))
# 可以成对出现 同色调的颜色 浅色和深色
# 比方说运动会,一个国家两名运动员 不同国家用不同颜色,
# 同一个国家的两名运动员颜色是同一色系的 可以通过paried来区别
sns.palplot(sns.color_palette('Paired', 10))
**使用xkcd颜色来命名颜色 xkcd包含一套针对随机RGB色的命名 xkcd对954种颜色进行命名,可以在xkcd_rgb函数中使用这些名称 字典中调用的命名颜色
**
https://xkcd.com/color/rgb/
# x [0, 1] y [0, 1] xkcd_rgb["pale red"]颜色 lw线宽
plt.plot([0, 1], [0, 1], sns.xkcd_rgb["pale red"], lw=13)
plt.plot([0, 1], [0, 2], sns.xkcd_rgb["medium green"], lw=13)
plt.plot([0, 1], [0, 3], sns.xkcd_rgb["denim blue"], lw=13);
如果想要从xkcd_rgb 字典中单独的抽取出一些颜色,你也可以将一组选好的言行放到xkcd_palette 函数中。
colors=["windows blue","amber","greyish","faded green","dusty purple"]
sns.palplot(sns.xkcd_palette(colors))
当然,您可能指向使用一组您特别喜欢的颜色。因为color_palette()接受一个颜色列表,这很容易做到。
flatui=["#9b59b6","#3498db","#95a5a6","#e74c3c","#34495e","#2ecc71"]
sns.palplot(sns.color_palette(flatui))
连续色板: 色彩随数据变换,比如数据越来越重要则颜色越来越深
sns.palplot(sns.color_palette("Blues"))
# 如果想要翻转渐变,可以在面板名称中添加一个_r后缀
sns.palplot(sns.color_palette("Blues_r"))
# cubehelix_palette()色调板 色调线性变换
sns.palplot(sns.color_palette("cubehelix",8))
light_palette()和dark_palette()调用定制连续调色板
默认情况下,任何有效的matplotlib颜色可以作为输入。另外辅助解释可以由input参数来控制。
目前你可以在hls或husl空间中提供迷人的rgb元祖, 您还可以使用任何有效的xkcd颜色的种种。
# reverse=True 翻转
sns.palplot(sns.light_palette("green"))
sns.palplot(sns.light_palette("green", reverse=True))
# reverse=True 翻转
sns.palplot(sns.light_palette("purple"))
sns.palplot(sns.light_palette("purple", reverse=True))
# reverse=True 翻转
sns.palplot(sns.light_palette("navy"))
sns.palplot(sns.light_palette("navy", reverse=True))
# 数值一定由大到小
sns.palplot(sns.light_palette((210,90,60),input="husl"))
sns.palplot(sns.light_palette((100,80,30),input="husl"))
sns.palplot(sns.light_palette((100,90,80),input="husl"))
# 设定画板的风格
sns.set_style("whitegrid")
# 颜色风格
sns.set_palette("husl")
sinplot()
# 设定画板的风格
sns.set_style("whitegrid")
# 颜色风格
sns.set_palette("hls")
sinplot()
当处理一个数据集的时候,我们经常会想要先看看特征变量是如何分布的。这会让我们对数据特征有个很好的初始认识,同时也会影响后续数据分析以及特征工程的方法。本篇将会介绍如何使用 seaborn 的一些工具来检测单变量和双变量分布情况。
注意:这里的数据集是随机产生的分布数据,由 numpy 生成,数据类型是ndarray。当然,pandas 的 Series 数据类型也是可以使用的,比如我们经常需要从 DataFrame 表中提取某一特征(某一列)来查看分布情况。
# 变量分析图
%matplotlib inline
import numpy as np
import pandas as pd
from scipy import stats, integrate
import matplotlib.pyplot as plt
import seaborn as sns
在seaborn中,快速观察单变量分布的最方便的方法就是使用 distplot() 函数。
默认会使用柱状图(histogram)来绘制,并提供一个适配的核密度估计(KDE)。
sns.set()
# 高斯分布 正态分布
x = np.random.normal(size = 200)
sns.distplot(x)
直方图是比较常见的,并且在 matplotlib 中已经存在了hist函数。直方图在横坐标的数据值范围内均等分的形成一定数量的数据段(bins),并在每个数据段内用矩形条(bars)显示y轴观察数量的方式,完成了对的数据分布的可视化展示。
为了说明这个,我们可以移除 kde plot,然后添加 rug plot(在每个观察点上的垂直小标签)。当然,你也可以使用 rug plot 自带的 rugplot() 函数,但是也同样可以在 distplot 中实现:
distplot
seaborn中的distplot主要功能是绘制单变量的直方图,且还可以在直方图的基础上施加kdeplot和rugplot的部分内容,是一个功能非常强大且实用的函数,其主要参数如下:
a:一维数组形式,传入待分析的单个变量
bins:int型变量,用于确定直方图中显示直方的数量,默认为None,这时bins的具体个数由Freedman-Diaconis准则来确定
hist:bool型变量,控制是否绘制直方图,默认为True
kde:bool型变量,控制是否绘制核密度估计曲线,默认为True
rug:bool型变量,控制是否绘制对应rugplot的部分,默认为False
fit:传入scipy.stats中的分布类型,用于在观察变量上抽取相关统计特征来强行拟合指定的分布,下文的例子中会有具体说明,默认为None,即不进行拟合
hist_kws,kde_kws,rug_kws:这几个变量都接受字典形式的输入,键值对分别对应各自原生函数中的参数名称与参数值,在下文中会有示例
color:用于控制除了fit部分拟合出的曲线之外的所有对象的色彩
vertical:bool型,控制是否颠倒x-y轴,默认为False,即不颠倒
norm_hist:bool型变量,用于控制直方图高度代表的意义,为True直方图高度表示对应的密度,为False时代表的是对应的直方区间内记录值个数,默认为False
label:控制图像中的图例标签显示内容
# 对现在的数据进行bin分成20个区域的数据
# kde:bool型变量,控制是否绘制核密度估计曲线,默认为True
sns.distplot(x, bins=20, kde=False)
# sns.distplot(x, bins=20)
# 对现在的数据进行bin分成20个区域的数据
# kde:bool型变量,控制是否绘制核密度估计曲线,默认为True
# rug:bool型变量,控制是否绘制对应rugplot的部分,默认为False
sns.distplot(x, bins=20, kde=False, rug=True)
x = np.random.gamma(6,size=200)#随机生成200个数
# print("x",x)
# print("x的数据类型",type(x))#ndarray
# set_palette()接受与color_palette()相同的参数,但是它会更改默认的matplotlib参数,以便成为所有的调色板配置
# 查看数据分布的情况
sns.set_palette("muted")#循环样式
sns.set(style="whitegrid",palette="muted",color_codes=True)
sns.distplot(x,kde=False,fit=stats.gamma)
df_iris=sns.load_dataset("fmri")
sns.set_style("whitegrid")
sns.set_palette("hls",10)
sns.boxplot(x=df_iris["subject"],y=df_iris["timepoint"])
plt.show()
核密度估计可能不被大家所熟悉,但它对于绘制分布的形状是一个非常有用的工具。就像直方图那样, KDE会在一个轴上通过高度沿着其他轴将观察的密度编码。
sns.distplot(x,hist=False,rug=True)
我们可以看到,如果我们使用kdeplot()函数,我们可以得到相同的曲线。这个函数实际上也被distplot()所使用,
但是如果你就只想要密度估计,那么kdeplot()会提供一个直接的接口更简单的操作其他选项。
seaborn中的kdeplot可用于对单变量和双变量进行核密度估计并可视化,其主要参数如下:
data:一维数组,单变量时作为唯一的变量
data2:格式同data2,单变量时不输入,双变量作为第2个输入变量
shade:bool型变量,用于控制是否对核密度估计曲线下的面积进行色彩填充,True代表填充
vertical:bool型变量,在单变量输入时有效,用于控制是否颠倒x-y轴位置
kernel:字符型输入,用于控制核密度估计的方法,默认为’gau’,即高斯核,特别地在2维变量的情况下仅支持高斯核方法
legend:bool型变量,用于控制是否在图像上添加图例
cumulative:bool型变量,用于控制是否绘制核密度估计的累计分布,默认为False
shade_lowest:bool型变量,用于控制是否为核密度估计中最低的范围着色,主要用于在同一个坐标轴中比较多个不同分布总体,默认为True
cbar:bool型变量,用于控制是否在绘制二维核密度估计图时在图像右侧边添加比色卡
color:字符型变量,用于控制核密度曲线色彩,同plt.plot()中的color参数,如’r’代表红色
cmap:字符型变量,用于控制核密度区域的递进色彩方案,同plt.plot()中的cmap参数,如’Blues’代表蓝色系
n_levels:int型,在而为变量时有效,用于控制核密度估计的区间个数,反映在图像上的闭环层数
sns.kdeplot(x,shade=True)#shade=True阴影部分显示
sns.kdeplot(x)
# 根据均值和协访差生成数据
mean, cov = [0, 1], [(1, 0.5), (.5, 1)]
# print("mean",mean)
# print("cov",cov)
data=np.random.multivariate_normal(mean,cov,size=200)
# print("data",data)
# print("data数据类型",type(data))#ndarray
df=pd.DataFrame(data,columns=["x","y"])
# print("df",df)
print("df数据类型",type(df))#DataFrame
绘制双变量分布 对于爽遍历分布的可视化也是非常有用的。在seaborn中最简单的方法就是joinplot()函数 它能够创建一个对面板图形来展示两个变量之间的联合关系,以及每个轴上单变量的分布情况。
双变量分布最时序的可视化方法无疑是散点图了,在散点图中每个观察结果以x轴和y轴值所对应的点展示。 你可以用matplotlib的plt.scatter函数来绘制一个散点图,它也是joinplot()函数显示的默认方式。
jointplot:
x,y:代表待分析的成对变量,有两种模式,第一种模式:在参数data传入数据框时,x、y均传入字符串,指代数据框中的变量名;第二种模式:在参数data为None时,x、y直接传入两个一维数组,不依赖数据框
data:与上一段中的说明相对应,代表数据框,默认为None
kind:字符型变量,用于控制展示成对变量相关情况的主图中的样式
color:控制图像中对象的色彩
height:控制图像为正方形时的边长
ratio:int型,调节联合图与边缘图的相对比例,越大则边缘图越矮,默认为5
space:int型,用于控制联合图与边缘图的空白大小
xlim,ylim:设置x轴与y轴显示范围
joint_kws,marginal_kws,annot_kws:传入参数字典来分别精细化控制每个组件
# 观测两个电量直接的分布关系最好用散点图
sns.jointplot(x="x",y="y",data=df)
修改kind为‘kde’来讲直方图和散点图转换为核密度估计图
# 数据量比较大的时候选择用jointplot来绘制散点
# kind字符型变量,用于控制展示成对变量相关情况的主图中的样式
x,y=np.random.multivariate_normal(mean,cov,1000).T
with sns.axes_style("white"):
sns.jointplot(x=x,y=y,kind="hex",color="k")
修改kind为‘reg’为联合图添加线性回归拟合直线与核密度估计结果:
# kind字符型变量,用于控制展示成对变量相关情况的主图中的样式
ax = sns.jointplot(x=x,y=y,kind="reg")
ax = sns.jointplot(x=x,y=y,kind="reg",color="k")
ax = sns.jointplot(x=x,y=y,kind="kde",color="red")
为了绘制数据集中多个成对的双变量,你可以使用 pairplot() 函数。这创建了一个轴矩阵,并展示了在一个 DataFrame 中每对列的关系。默认情况下,它也绘制每个变量在对角轴上的单变量。
iris=sns.load_dataset("iris")
# print(iris)
sns.pairplot(iris)
数据集中的数据类型有很多种,除了连续的特征变量之外,最常见的就是类目型的数据类型了,常见的比如人的性别,学历,爱好等。这些数据类型都不能用连续的变量来表示,而是用分类的数据来表示。
seaborn针对分类型的数据有专门的可视化函数,这些函数可大致分为三种:
分类数据散点图: swarmplot(), stripplot()
分类数据的分布图: boxplot(), violinplot()
分类数据的统计估算图 : barplot(), pointplot()
#############回归分析绘图#################
# 在统计学中,回归分析(regression analysis)
# 值的是确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法。
# 再大数据分析中,回归分析是一种一策行的建模技术,它研究的是因变量(目标)
# 和自变量(预测器)之间的关系。例如,司机鲁莽驾驶与道路交通事故数量之间的关系,
# 最好的研究方法就是回归。
%matplotlib inline
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
import seaborn as sns
sns.set(color_codes=True)
# seed()用于指定随机数生成时所用算法开始的整数值
# sns.load_dataset("tips")中的tips是seaborn库自带的一个数据集
tips = sns.load_dataset("tips")
# print("tips",tips)
tips.head()
regplot()和mplot()都可以绘制回归关系,推荐regplot()
可以用regplot(x, y, data)绘制回归图。data参数是DataFram类型,x是其中某一列列名,是即将绘制的图的x坐标,y是其中某一列,是图的y坐标
下面代码是对seaborn内置数据集“tips”中某两列绘制回归图
sns.regplot(x="total_bill", y="tip", data=tips)
sns.lmplot(x="total_bill", y="tip", data=tips)
# 查看位数个消费之家的关系,这样的数据不太是个做回归模型的绘图
sns.regplot(data=tips,x="size", y="tip")
# 稍微加一点抖动,让图形看起来更真实一些x_jitter=0.05
sns.regplot(x="size",y="tip",data=tips,x_jitter=0.05)
多变量分析(multivariable analysis)为系统方法的一种,包含了许多的方法, 最基本的为单变量,再延伸出来的多变量分析,统计资料中有多个变量(或称因素、指标) 同事在时的统计分析,是统计学的重要分支,是单变量统计的发展
分类数据散点图
在分类数据的基础上展示定量数据的最简单函数就是 stripplot()。
# 统计天与小费之间的关系
sns.stripplot(x="day", y="total_bill", data=tips);
# 加一点抖动jitter=True x="day"x轴标题,y="total_bill"y轴标题 data=tips数据
# 这看上去类似散点图,但不同的是,横坐标是分类的数据,只不过一些数据点上会相互重叠,不便于观察
# 所以一个简单的解决办法就是加入jiyyer参数,调整横坐标的位置。
sns.stripplot(x="day",y="total_bill",data=tips,jitter=True)
# 当然,还有一个不同的方法就是使用swarmplot()函数,
# 这个函数的好处就是所以的点都不会重叠,这样可以很清晰的观察到数据分布。
# 类似树结构的展示方式
sns.swarmplot(x="day", y="total_bill", data=tips)
# 在这基础上,㛑可以通过hue参数加入另一个嵌套的分类变量,
# 而且嵌套的分类变量也可以以不同的颜色区别,十分方便。
sns.swarmplot(x="day",y="total_bill",hue="sex",data=tips)
sns.swarmplot(x="day",y="total_bill",hue="time",data=tips)
虽然分类的散点图很有用,但有时候想要快速查看各分类下的数据分布就不是很直观了。为此,第二种函数解决了这个问题。
通过箱型图可以很直观的观察到数据的四分位分布(1/4分位,中位数,3/4分位,以及四分位距),这种可视化对于在机器学习的预处理阶段(尤其是发现数据异常离散值)十分有效。
IQR即统计学概念四分位距,第一/四分位与第三/四分位直接的距离
N=1.5IQR 如果一个值>Q3+N或
# 盒子上面是3/4 盒子下面是1/4位 上面的菱形 就代表离群点
# print(tips["day"].value_counts())
# print(tips)
sns.boxplot(x="day",y="total_bill",hue="time",data=tips)
# 小提琴图 越胖出现的值越多,越瘦 值越少
sns.violinplot(y="day",x="total_bill",hue="time",data=tips)
# 当hue的嵌套类型只有两类的时候,也可以使用split参数将小提琴分割:
# split=True 小提琴是对称的 左边的一个属性,右边的一个属性 比较直观
# 不同性别对值的影响 mail femail的差异
sns.violinplot(x="day",y="total_bill",hue="sex",data=tips)
# 当hue的嵌套类型只有两类的时候,也可以使用split参数将小提琴分割:
# split=True 小提琴是对称的 左边的一个属性,右边的一个属性 比较直观
# 不同性别对值的影响 mail femail的差异
sns.violinplot(x="day",y="total_bill",hue="sex",data=tips,split=True)
# 还有一点比较好的是,可以将 swarmplot(),violinplot(),或 boxplot() 混合使用,这样可以结合多种绘图的特点展示更完美的效果。
# alpha透明度 合成到一起来绘制合体到一起看
sns.violinplot(x="day", y="total_bill", data=tips, inner=None)
sns.swarmplot(x="day", y="total_bill", data=tips, color="w", alpha=.5);
分类数据统计估计图 有时候,我们不想展示分类数据下的分布,而是想展示每一类的集中趋势。 seaborn 有两个主要的方法来展示这个,并且这些函数api与上面函数的用法是一样的。
我们最熟悉的方式就是使用一个条形图。 在Seaborn中barplot()函数会在整个数据集上显示估计, 默认情况下使用均值进行估计。 当在每个类别中有多个类别时(使用了 hue), 它可以使用引导来计算估计的置信区间,并使用误差条来表示置信区间:
# 船舱等级对于获救率 以及性别的关系 x-sex y--获救率
# male 一等舱会就率高
# female 一等舱获救率高 女士获救率高
titanic=pd.read_csv("C:/Total-folder/work/AI/machine/data/titanic_train.csv")
sns.barplot(x="Sex", y="Survived", hue="Pclass", data=titanic);
# 点图可以更好的描述变化差异
# 船舱不同等级通过点图来体现
# 在一个量上随着其他条件变化 可以通过点图 可以体现出来
sns.pointplot(x="Sex", y="Survived", hue="Pclass", data=titanic)
# markers 这一类点的样子 一类点是o 一类点是其他样子 线条指定
sns.pointplot(x="Pclass", y="Survived", hue="Sex", data=titanic,
palette={"male": "g", "female": "m"},
markers=["^", "o"], linestyles=["-", "--"]);
虽然使用“长格式”或“整洁”数据是优选的,但是这些函数也可以应用于各种格式的“宽格式”数据,包括pandas DataFrame或二维numpy数组阵列。这些对象应该直接传递给数据参数:
# 宽型数据
# 横着绘制盒图 竖着自己指定 h--横着绘制 v--竖着绘制
sns.boxplot(data=iris, orient="h");
# print(help(sns.boxplot))
# 宽型数据
# 横着绘制盒图 竖着自己指定 h--横着绘制 v--竖着绘制
sns.boxplot(data=iris, orient="v");
# 宽型数据
# 横着绘制盒图 竖着自己指定 h--横着绘制 v--竖着绘制
sns.boxplot(data=iris, orient="v",palette="Greens");