博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
人工智能学习笔记——可视化库Seaborn
阅读量:4218 次
发布时间:2019-05-26

本文共 8625 字,大约阅读时间需要 28 分钟。

import seaborn as sns

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline#写完代码直接把图显示在画布上

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)
sinplot()

sns.set()#使用Seaborn库的默认参数

sinplot()

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")

sinplot()

sns.set_style("white")

sinplot()

sns.set_style("ticks")

sinplot()

sns.set_style("ticks")

sinplot()
sns.despine()

sns.despine(offset=20)#设置与坐标轴的偏移

sns.set_style("whitegrid")

data = np.random.normal(size=(20,6))+np.arange(6)/2
sns.boxplot(data = data,palette="deep")
sns.despine(left=True)#左侧坐标轴隐藏

设置子图风格

with sns.axes_style("darkgrid"):#with中的风格不与其外的风格相同

    plt.subplot(211)
    sinplot()
plt.subplot(212)
sinplot(-1)

内容

sns.set_context("paper")
plt.figure(figsize=(8, 6))
sinplot()

sns.set_context("talk")

plt.figure(figsize=(8, 6))
sinplot()

sns.set_context("poster")

plt.figure(figsize=(8, 6))
sinplot()

sns.set_context("notebook", font_scale=1.5, rc={"lines.linewidth": 2.5})#font_scale字体大小lines.linewidth线宽

sinplot()

调色板

  • 颜色很重要
  • color_palette()能传入任何Matplotlib所支持的颜色
  • color_palette()不写参数则默认颜色
  • set_palette()设置所有图的颜色

sns.set(rc={"figure.figsize":(6,6)})

current_palette = sns.color_palette()

sns.palplot(current_palette)
6个默认的颜色循环主题: deep, muted, pastel, bright, dark, colorblind

圆形画板

当你有六个以上的分类要区分时,最简单的方法就是在一个圆形的颜色空间中画出均匀间隔的颜色(这样的色调会保持亮度和饱和度不变)。这是大多数的当他们需要使用比当前默认颜色循环中设置的颜色更多时的默认方案。
最常用的方法是使用hls的颜色空间,这是RGB值的一个简单转换。

sns.palplot(sns.color_palette("hls",8))

data = np.random.normal(size=(20, 8)) + np.arange(8) / 2

sns.boxplot(data=data,palette=sns.color_palette("hls", 8))

hls_palette()函数来控制颜色的亮度和饱和

  • l-亮度 lightness
  • s-饱和 saturation

sns.palplot(sns.hls_palette(8, l=.7, s=.9))

sns.palplot(sns.hls_palette(8, l=.5, s=.9))

颜色对比

sns.palplot(sns.color_palette("Paired",8))

使用xkcd颜色来命名颜色

xkcd包含了一套众包努力的针对随机RGB色的命名。产生了954个可以随时通过xdcd_rgb字典中调用的命名颜色。

plt.plot([0, 1], [0, 1], sns.xkcd_rgb["pale red"], lw=3)

plt.plot([0, 1], [0, 2], sns.xkcd_rgb["medium green"], lw=3)
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))
连续色板
色彩随数据变换,比如数据越来越重要则颜色越来越深

sns.palplot(sns.color_palette("Blues"))

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

sns.palplot(sns.color_palette("BuGn_r"))

cubehelix_palette()调色板

色调线性变换
sns.palplot(sns.color_palette("cubehelix", 8))
sns.palplot(sns.cubehelix_palette(8, start=.5, rot=-.75))

sns.palplot(sns.cubehelix_palette(8, start=.75, rot=-.150))

light_palette() 和dark_palette()调用定制连续调色板

sns.palplot(sns.light_palette("green"))

sns.palplot(sns.dark_palette("purple"))

sns.palplot(sns.light_palette("navy", reverse=True))

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);

sns.palplot(sns.light_palette((210, 90, 60), input="husl"))

单变量分析绘制

from scipy import stats, integrate

sns.set(color_codes=True)
np.random.seed(sum(map(ord, "distributions")))

绘制直方图

x = np.random.normal(size=100)

sns.distplot(x,kde=False)#核密度不设置

sns.distplot(x, bins=20, kde=False)

数据分布情况

x = np.random.gamma(6, size=200)

sns.distplot(x, kde=False, fit=stats.gamma)

根据均值和协方差生成数据

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)

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")

两两对比绘图

iris = sns.load_dataset("iris")
sns.pairplot(iris)

回归分析绘图

%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)
np.random.seed(sum(map(ord, "regression")))
tips = sns.load_dataset("tips")
tips.head()

regplot()和lmplot()都可以绘制回归关系,推荐regplot()

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)#加上0.05的范围浮动

sns.stripplot(x="day", y="total_bill", data=tips);

重叠是很常见的现象,但是重叠影响我观察数据的量了
sns.stripplot(x="day", y="total_bill", data=tips, jitter=True)#数据左右偏移

sns.swarmplot(x="day", y="total_bill", data=tips)

sns.swarmplot(x="day", y="total_bill", hue="sex",data=tips)#hue=其统计特征

盒图

  • IQR即统计学概念四分位距,第一/四分位与第三/四分位之间的距离
  • N = 1.5IQR 如果一个值>Q3+N或 < Q1-N,则为离群点

sns.boxplot(x="day", y="total_bill", hue="time", data=tips);

sns.boxplot(data=iris,orient="h");

小提琴图

sns.violinplot(x="total_bill", y="day", hue="time", data=tips);

sns.violinplot(x="day", y="total_bill", hue="sex", data=tips, split=True);

图像合并

sns.violinplot(x="day", y="total_bill", data=tips, inner=None)
sns.swarmplot(x="day", y="total_bill", data=tips, color="w", alpha=.5)

sns.barplot(x="sex", y="survived", hue="class", data=titanic);#泰坦尼克数据按照不同性别在不同等级的船舱的获救概率

点图可以更好的描述变化差异

sns.pointplot(x="sex", y="survived", hue="class", data=titanic);

sns.pointplot(x="class", y="survived", hue="sex", data=titanic,

              palette={"male": "g", "female": "m"},
              markers=["^", "o"], linestyles=["-", "--"]);

多层面板分类图

sns.factorplot(x="day", y="total_bill", hue="smoker", data=tips)

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")#col纬度

sns.factorplot(x="time", y="total_bill", hue="smoker",

               col="day", data=tips, kind="box", size=4, aspect=.5)#size大小,aspect长宽比

seaborn.factorplot(x=None, y=None, hue=None, data=None, row=None, col=None, col_wrap=None, estimator=, ci=95, n_boot=1000, units=None, order=None, hue_order=None, row_order=None, col_order=None, kind='point', size=4, aspect=1, orient=None, color=None, palette=None, legend=True, legend_out=True, sharex=True, sharey=True, margin_titles=False, facet_kws=None, **kwargs)

Parameters:

  • x,y,hue 数据集变量 变量名
  • date 数据集 数据集名
  • 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

热度图绘制

%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)

[[0.5488135  0.71518937 0.60276338] [0.54488318 0.4236548  0.64589411] [0.43758721 0.891773   0.96366276]]

ax = sns.heatmap(uniform_data, vmin=0.2, vmax=0.5)

normal_data = np.random.randn(3, 3)
print (normal_data)
ax = sns.heatmap(normal_data, center=0)#以0为中心

flights = sns.load_dataset("flights")

flights.head()
flights = flights.pivot("month", "year", "passengers")
print (flights)
ax = sns.heatmap(flights)

year       1949  1950  1951  1952  1953  1954  1955  1956  1957  1958  1959  \month                                                                         January     112   115   145   171   196   204   242   284   315   340   360   February    118   126   150   180   196   188   233   277   301   318   342   March       132   141   178   193   236   235   267   317   356   362   406   April       129   135   163   181   235   227   269   313   348   348   396   May         121   125   172   183   229   234   270   318   355   363   420   June        135   149   178   218   243   264   315   374   422   435   472   July        148   170   199   230   264   302   364   413   465   491   548   August      148   170   199   242   272   293   347   405   467   505   559   September   136   158   184   209   237   259   312   355   404   404   463   October     119   133   162   191   211   229   274   306   347   359   407   November    104   114   146   172   180   203   237   271   305   310   362   December    118   140   166   194   201   229   278   306   336   337   405   year       1960  month            January     417  February    391  March       419  April       461  May         472  June        535  July        622  August      606  September   508  October     461  November    390  December    432

ax = sns.heatmap(flights, annot=True,fmt="d")

ax = sns.heatmap(flights, linewidths=.5)#间距

ax = sns.heatmap(flights, cmap="YlGnBu")

ax = sns.heatmap(flights, cbar=False)#隐藏bar

你可能感兴趣的文章
hdu 3460 Ancient Printer(trie tree)
查看>>
KMP
查看>>
poj 3863Business Center
查看>>
Android编译系统简要介绍和学习计划
查看>>
Android编译系统环境初始化过程分析
查看>>
user2eng 笔记
查看>>
DRM in Android
查看>>
ARC MRC 变换
查看>>
Swift cell的自适应高度
查看>>
【linux】.fuse_hiddenXXXX 文件是如何生成的?
查看>>
【LKM】整合多个LKM为1个
查看>>
【Windows C++】调用powershell上传指定目录下所有文件
查看>>
Java图形界面中单选按钮JRadioButton和按钮Button事件处理
查看>>
小练习 - 排序:冒泡、选择、快排
查看>>
SparkStreaming 如何保证消费Kafka的数据不丢失不重复
查看>>
Spark Shuffle及其调优
查看>>
数据仓库分层
查看>>
常见数据结构-TrieTree/线段树/TreeSet
查看>>
Hive数据倾斜
查看>>
TopK问题
查看>>