sns.set()使用seaborn默认的参数/风格组合;seaborn 的5种主题风格如下:
darkgrid 、 whitegrid 、 dark、 white、 ticks sns.set_style("whitegrid") # 风格设置 为白色格子 data = np.random.normal(size=(20, 6)) + np.arange(6) / 2 sns.boxplot(data=data) # 盒图/箱线图sns.set_style("dark") 背景为深色,没有刻度线 sns.set_style("ticks") # 加刻度线 sns.despine() # 指定其它参数,去掉上方和右边的线段 sns.despine(left=True) # 隐藏左边的轴
按照不同类别对样本数据进行分布散点图绘制;通过hue参数再分类; palette 设置调色盘
sns.stripplot(x="sex", y="total_bill", hue="day", data=tips, jitter=True, palette="Set2", # 设置调色盘 dodge=True, # 是否拆分 ) sns.stripplot(x="day", y="total_bill", data=tips,jitter = True, order = ['Sat','Sun']) # order → 筛选类别可视化图的颜色很重要!
color_palette()能传入任何Matplotlib所支持的颜色 ;不写参数则默认颜色 set_palette()设置所有图的颜色 6个默认的颜色循环主题:deep, muted, pastel, bright, dark, colorblind
sns.set(rc={"figure.figsize": (6, 6)}) current_palette = sns.color_palette() sns.palplot(current_palette)圆形画板
当分类的类别数大于6时,最简单的方法就是在一个圆形的颜色空间中画出均匀间隔的颜色(这样的色调会保持亮度和饱和度不变)。这是大多数的当他们需要使用比当前默认颜色循环中设置的颜色更多时的默认方案。最常用的方法是使用hls的颜色空间,这是RGB值的一个简单转换。
画8种渐变色的盒图
data = np.random.normal(size=(20, 8)) + np.arange(8) / 2 sns.boxplot(data=data,palette=sns.color_palette("hls", 8)) # 8种颜色hls_palette()函数来控制颜色的亮度和饱和度
l-亮度 lightness s-饱和 saturation sns.palplot(sns.hls_palette(8, l=.5, s=.8))Paired可以让相近的两个颜色成对显示
使用xkcd颜色来命名颜色
xkcd包含了一套针对随机RGB色的命名。产生了954个可以随时通过xdcd_rgb字典中调用的命名颜色。需要提前了解可以调用的颜色。 xkcd 包的两种调用方式如下:
plt.plot([0, 1], [0, 3], sns.xkcd_rgb["denim blue"], lw=3) colors = ["windows blue", "amber", "greyish", "faded green", "dusty purple"] sns.palplot(sns.xkcd_palette(colors))色彩随数据变换,比如数据越来越重要则颜色由浅到深?需要传入一种颜色。 颜色_r则由深到浅
sns.palplot(sns.color_palette("Blues")) # 蓝色:由浅到深 sns.palplot(sns.color_palette("BuGn_r")) #绿色:由深到浅light_palette() 和dark_palette()调用定制连续调色板,
reverse=True表示颜色由深到浅
sns.palplot(sns.light_palette("green")) sns.palplot(sns.light_palette("navy", reverse=True)) sns.palplot(sns.light_palette((210, 90, 60), input="husl")) x, y = np.random.multivariate_normal([0, 0], [[1, -.5], [-.5, 1]], size=300).T pal = sns.dark_palette("green", as_cmap=True) # 里层为浅色,外层为深色的颜色渐变 sns.kdeplot(x, y, cmap=pal);根据均值和协方差生成数据
mean, cov = [0, 1], [(1, .5), (.5, 1)] data = np.random.multivariate_normal(mean, cov, 200) # 产生多维正态分布的随机数 df = pd.DataFrame(data, columns=["x", "y"]) # 数据框 df反映特征之间的相关关系,还会显示皮尔逊相关系数;观测两个变量之间的分布关系最好用散点图
sns.jointplot(x="x", y="y", data=df);regplot()和lmplot()都可以绘制回归关系,入门推荐regplot() ;lmplot()功能和规范更多。
import seaborn as sns sns.set(color_codes=True) np.random.seed(sum(map(ord, "regression"))) tips = sns.load_dataset("tips") tips.head() sns.regplot(x="total_bill", y="tip", data=tips) sns.lmplot(x="total_bill", y="tip", data=tips) sns.regplot(x="size", y="tip", data=tips, x_jitter=.05) # jitter 给数据加上扰动,扰动范围可自行指定sns.swarmplot(x="day", y="total_bill", data=tips)的可视化结果更像茎叶图 hue 指定划分数据的那个统计特征。调换x 和y的列名,则图像就由横向变为纵向。
sns.swarmplot(x="day", y="total_bill", hue="sex",data=tips) sns.swarmplot(x="total_bill", y="day", hue="time", data=tips); # 调换x 和y的列名;横着画图中间的黑色粗线为4分位距,细线为 95% 置信区间。
sns.violinplot(x="day", y="total_bill", data=tips, inner=None) # inner 小提琴内部图形 sns.swarmplot(x="day", y="total_bill", data=tips, color="w", alpha=.5) # alpha 透明度 # 插入散点图 plt.show() sns.violinplot(x="day", y="total_bill", data=tips, inner=None) sns.swarmplot(x="day", y="total_bill", data=tips, color="w",) plt.show()又叫柱状图,直方图;置信区间估计【置信区间:样本均值 + 抽样误差】
sns.barplot(x="sex", y="survived", hue="class", data=titanic, palette = 'hls', order = ['male','female'], # 筛选类别 capsize = 0.05, # 误差线横向延伸宽度 saturation=.8, # 颜色饱和度 errcolor = 'gray',errwidth = 2, # 误差线颜色,宽度 ci = 'sd' # 置信区间误差 → 0-100内值、'sd'、None )sns.barplot(x="sex", y="survived", hue="class", data=titanic); 显示泰坦尼克数据集上不同船舱等级【class】的男性与女性的存活率;
# 柱状图 - 置信区间估计 sns.barplot(x="day", y="total_bill", hue="sex", data=tips, palette = 'Blues',edgecolor = 'w') tips.groupby(['day','sex']).mean() # 计算数据 crashes = sns.load_dataset("car_crashes").sort_values("total", ascending=False) # 加载数据 f, ax = plt.subplots(figsize=(6, 15)) # 创建图表 sns.set_color_codes("pastel") # 设置第一个柱状图 sns.barplot(x="total", y="abbrev", data=crashes, label="Total", color="b",edgecolor = 'w') sns.set_color_codes("muted") # 设置第二个柱状图 sns.barplot(x="alcohol", y="abbrev", data=crashes, label="Alcohol-involved", color="b",edgecolor = 'w') ax.legend(ncol=2, loc="lower right") sns.despine(left=True, bottom=True)sns.pointplot(x="sex", y="survived", hue="class", data=titanic);显示泰坦尼克数据集上不同船舱等级【class】的男性与女性的存活率的差距;
sns.pointplot(x="time", y="total_bill", hue = 'smoker',data=tips, palette = 'hls', # # 用法和barplot相似 dodge = True, # 设置点是否分开 join = True, # 是否连线 markers=["o", "x"], linestyles=["-", "--"], # 设置点样式、线型 ) tips.groupby(['time','smoker']).mean()['total_bill'] # 计算数据 sns.pointplot(x="class", y="survived", hue="sex", data=titanic, palette={"male": "g", "female": "m"}, # 颜色 markers=["^", "o"], linestyles=["-", "--"]); # 数据点标记为三角、圆圈,怎样衡量离群点与正常值的差异,这取决于数据的特征。 盒图又叫箱型图、箱线图;五数概括法即用下面的五个数来概括数据:
最小值min; 第1四分位数(Q1); 中位数(Q2); 第3四分位数(Q3); 最大值maxIQR即统计学中的四分位距,第一/四分位Q1与第三/四分位Q3之间的距离 一般可认为N = 1.5IQR 如果一个值大于Q3+N或 小于Q1-N,则为离群点。
sns.boxplot(x="day", y="total_bill", data=tips, linewidth = 2, # 线宽 width = 0.8, # 箱之间的间隔比例 fliersize = 3, # 异常点大小 palette = 'hls', # 设置调色板 whis = 1.5, # 设置IQR notch = True, # 设置是否以中值做凹槽 order = ['Thur','Fri','Sat','Sun'], # 筛选类别 ) # 绘制箱型图 sns.swarmplot(x="day", y="total_bill", data=tips,color ='k',size = 3,alpha = 0.8) # 可以添加散点图 sns.boxplot(data=iris,orient="h"); # orient="h" 表示图形要横着放
Parameters:
x,y,hue 数据集变量 ;变量名 hue 是分组指标 data 数据集; 数据集名 row,col 更多分类变量进行平铺显示; 变量名 col_wrap 每行的最高平铺数; 整数 estimator 在每个分类中进行矢量到标量的映射 ;矢量 ci 置信区间; 浮点数或None n_boot 计算置信区间时使用的引导迭代次数 ;整数 units 采样单元的标识符,用于执行多级引导和重复测量设计; 数据变量或向量数据 order, hue_order 对应排序列表 ;字符串列表 row_order, col_order 对应排序列表 ;字符串列表 kind : 可选:point 默认为点图, bar 柱形图, count 频次, box 箱体, violin 提琴, strip 散点,swarm 分散点 size 每个面的高度(英寸); 标量 aspect 纵横比 ;标量 orient 方向 "v"/"h" color 颜色 matplotlib颜色 palette 调色板 seaborn颜色色板或字典 legend hue的信息面板 True/False legend_out 是否扩展图形,并将信息框绘制在中心右边 True/False share{x,y} 共享轴线 True/False示例:
sns.factorplot(x="day", y="total_bill", hue="smoker", data=tips, kind="bar") # 条形图 sns.factorplot(x="day", y="total_bill", hue="smoker", col="time", data=tips, kind="swarm") # kind="swarm" 树形图 sns.factorplot(x="time", y="total_bill", hue="smoker", col="day", data=tips, kind="box", size=4, aspect=.5) # kind="box"盒图sns.catplot(x="smoker", y="tip", order=["No", "Yes"], data=tips); ` 使用order参数在特定图表的基础上控制排序
sns.catplot(x="day", y="total_bill", hue="smoker", kind="box", data=tips);添加色调变量hue
显示与facet的多种关系
sns.catplot(x="day", y="total_bill", hue="smoker", col="time", aspect=.6, kind="swarm", data=tips);函数boxenplot() 、 参数kind=”boxen”绘制的图表类似于箱形图,但已经过优化,可显示有关分布形状的更多信息。它最适合更大的数据集。
sns.catplot(x="color", y="price", kind="boxen", data=diamonds.sort_values("color"));先指定属性col ,构造要可视化的区域,再用map函数作图;要求数据格式为pandas中的格式。 在大多数情况下,使用图形级别功能(如relplot()或catplot())比 FacetGrid直接使用更好。
class seaborn.FacetGrid(data, row=None, col=None, hue=None, col_wrap=None, sharex=True, sharey=True, height=3, aspect=1, palette=None, row_order=None, col_order=None, hue_order=None, hue_kws=None, dropna=True, legend_out=True, despine=True, margin_titles=False, xlim=None, ylim=None, subplot_kws=None, gridspec_kws=None, size=None)整体布局的设置
g = sns.FacetGrid(tips, col="day", size=4, aspect=.5) # size 图像大小;aspect设置图的长宽比 g.map(sns.barplot, "sex", "total_bill");自行指定顺序,则要用pandas中的Categorical ,
from pandas import Categorical ordered_days = Categorical(['Thur', 'Fri', 'Sat', 'Sun']) # 指定顺序 g = sns.FacetGrid(tips, row="day", row_order=ordered_days, size=1.7, aspect=4,) g.map(sns.boxplot, "total_bill");用字典dict为不同类别指定颜色
pal = dict(Lunch="seagreen", Dinner="gray") # 用字典dict 指定颜色 g = sns.FacetGrid(tips, hue="time", palette=pal, size=5) # palette 指定调色板 g.map(plt.scatter, "total_bill", "tip", s=50, alpha=.7, linewidth=.5, edgecolor="white") # edgecolor边界颜色 ;s是数据点圆圈的大小 g.add_legend();marker 指定数据点的形状
g = sns.FacetGrid(tips, hue="sex", palette="Set1", size=5, hue_kws={"marker": ["^", "v"]}) # marker 数据点的形状 g.map(plt.scatter, "total_bill", "tip", s=100, linewidth=.5, edgecolor="white") g.add_legend();相关图又称散点图或散布图。
iris = sns.load_dataset("iris") g = sns.PairGrid(iris) # 画成对的图,显示任意两个变量之间的相关关系图, g.map_diag(plt.hist) # 指定对角线上画直方图 g.map_offdiag(plt.scatter); # 非对角线上画 散点图 g = sns.PairGrid(iris, hue="species") # 添加区分的类别为物种 g.map_diag(plt.hist) g.map_offdiag(plt.scatter) g.add_legend();也可以在上三角和下三角中使用不同的函数来强调关系的不同方面。
g = sns.PairGrid(iris) g.map_upper(plt.scatter) g.map_lower(sns.kdeplot,color='red') g.map_diag(sns.kdeplot, lw=2, legend=False);PairGrid很灵活,但要快速查看数据集,使用pairplot()可以更容易。此功能默认使用散点图和直方图,但会添加一些其他类型(对角线上的回归图和对角线上的核密度估计KDE)。
.pairplot绘制两两变量之间的关系;对角线上是直方图【单变量】,其它是散点图。
g = sns.pairplot(iris, hue="species", palette="Set2", diag_kind="kde", height=2.5)vars指定画图的特征子集
g = sns.PairGrid(iris, vars=["sepal_length", "sepal_width"], hue="species") g.map(plt.scatter); g = sns.PairGrid(tips, hue="size", palette="GnBu_d") # 分类指标为size,有6个取值 g.map(plt.scatter, s=50, edgecolor="white") g.add_legend();`heatmap用颜色的深浅、亮度等来显示数据的分布,还常用于可视化特征间的相关系数。用颜色深浅来反映相关程度。
%matplotlib inline import matplotlib.pyplot as plt import numpy as np; np.random.seed(0) import seaborn as sns; sns.set() uniform_data = np.random.rand(3, 3) print (uniform_data) heatmap = sns.heatmap(uniform_data) # 最右边的是color barvmaxax = sns.heatmap(uniform_data, vmin=0.2, vmax=0.5) 取值低于vmin的是一种颜色,高于vmax的是另一种颜色, center=0指定中心值,大于或小于零的值对应的颜色不一样。
normal_data = np.random.randn(3, 3) print (normal_data) ax = sns.heatmap(normal_data, center=0) # 例如股票数据的收益率大于0表示涨,小于零表示跌 heatmap参数注释annotbool ;为True表示增加注释,把值加到对应位置去fmt数值的格式,fmt默认为科学计数法,作图容易乱码cmap可调用的调色板linewidths格子的间距,更容易清晰地看出数值的差距cbarcolor bar , 取False则不显示cbar flights = sns.load_dataset("flights") flights = flights.pivot("month", "year", "passengers") # pivot数据透视表, # ax = sns.heatmap(flights) # fmt="d"表示数值的格式,#cmap 指定数据值到颜色空间的映射; ax = sns.heatmap(flights, annot=True,fmt="d", cmap="YlGnBu",linewidths=.5, cbar=True)【参考链接】 Python图表数据可视化Seaborn:2. 分类数据可视化-分类散点图|分布图(箱型图|小提琴图|LV图表)|统计图(柱状图|折线图)
多变量的分布绘图:stripplot()、swarmplot();箱线图与小提琴图;条形图;点图;多层面板分类图:catplot函数、FacetGrid 类、PairGrid类;热力图
seaborn教程——用分类数据绘图
Seaborn学习(一)------- 构建结构化多绘图网格(FacetGrid()、map())详解