可视化库Seaborn

 老唐数据分析机器学习

 

Seaborn-1Style
可视化库Seaborn_第1张图片
import seaborn as sns
import numpy as np
import matplotlib as mpl
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 * .5) * (7 - i) * flip)

sinplot()
可视化库Seaborn_第2张图片

sns.set()
sinplot()
可视化库Seaborn_第3张图片
'''
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)
可视化库Seaborn_第4张图片

data
'''
array([[ 0.63986007,  2.14485399,  1.01131002,  1.40268475,  2.339169  ,
         3.22343471],
       [ 0.52113843,  0.83365849,  1.56715032,  0.7159742 ,  0.35526665,
         2.64698869],
       [ 0.26712799,  1.93107107,  0.11208568, -0.09777214,  1.0448611 ,
         2.89050072],
       [-0.23100111, -0.21345777,  0.45369097,  2.55874325,  2.02284598,
         2.34599155],
       [ 0.13584382,  1.03477685,  1.65613141,  1.57249385,  1.26252323,
         1.2502523 ],
       [-0.98887618,  2.12578215,  0.50486762,  1.07129467,  0.29844895,
         2.83149809],
       [ 0.2791657 ,  0.70301803,  1.68786681, -0.72639551,  3.02613673,
         2.09390095],
       [ 0.97237265,  1.60585848, -0.23019449,  0.94411186,  2.47911711,
         3.75833174],
       [ 2.36644874,  1.74865381,  0.49079692,  1.84241922,  2.13008836,
         3.74685447],
       [ 1.49364838,  0.19296167,  0.75148434,  1.68317246,  2.3352623 ,
         2.77883528],
       [ 0.54814897, -0.03756201,  2.30158484,  0.35876512,  1.43424766,
         1.20749153],
       [ 1.01546528,  0.70699355,  0.80075029,  1.92595054, -0.46382634,
         2.35953131],
       [-0.68841373,  0.46816329,  1.62756676,  1.38552499,  1.99805172,
         3.91744223],
       [-1.24971189,  2.30894878,  0.56885806,  1.61251681,  1.92630285,
         4.16217846],
       [-0.77979552, -0.29186602,  1.21501248,  2.95481369,  0.82249344,
         2.77935004],
       [ 0.05522944, -0.23371659,  1.62287008,  0.2330687 ,  3.1935013 ,
         4.41159611],
       [ 3.37032537, -0.32074589,  3.84291451,  2.23170646,  1.11824526,
         3.56219305],
       [ 2.23227077,  2.94561766, -1.28387574,  5.67984199,  1.72101898,
         3.73012338],
       [ 1.36362738,  0.83392614,  0.09145057,  2.0837733 ,  2.33104093,
         3.14713488],
       [ 0.27535606,  0.61696806,  1.35029868,  0.95423693,  4.08083078,
         1.63515582]])
'''

sns.set_style("dark")
sinplot()
可视化库Seaborn_第5张图片

sns.set_style("white")
sinplot()
可视化库Seaborn_第6张图片

sns.set_style("ticks")
sinplot()
可视化库Seaborn_第7张图片

sinplot()
sns.despine()
可视化库Seaborn_第8张图片
#f, ax = plt.subplots()
sns.violinplot(data)
sns.despine(offset=10) # offset 设置图像离轴线的距离
可视化库Seaborn_第9张图片

sns.set_style("whitegrid")
sns.boxplot(data=data, palette="deep")
sns.despine(left=True)
可视化库Seaborn_第10张图片

with sns.axes_style("darkgrid"):
    plt.subplot(211)
    sinplot()
plt.subplot(212)
sinplot(-1)
可视化库Seaborn_第11张图片

sns.set()

sns.set_context("paper")
plt.figure(figsize=(8, 6))
sinplot()
可视化库Seaborn_第12张图片

sns.set_context("talk")
plt.figure(figsize=(8, 6))
sinplot()
可视化库Seaborn_第13张图片

sns.set_context("poster")
plt.figure(figsize=(8, 6))
sinplot()
可视化库Seaborn_第14张图片

sns.set_context("notebook", font_scale=1.5, rc={"lines.linewidth": 2.5})
sinplot()
可视化库Seaborn_第15张图片

 

 

 

 

Seaborn-2Color

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
sns.set(rc={"figure.figsize": (6, 6)}) 调色板 颜色很重要 color_palette()能传入任何Matplotlib所支持的颜色 color_palette()不写参数则默认颜色 set_palette()设置所有图的颜色 分类色板 current_palette = sns.color_palette() sns.palplot(current_palette) 

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

最常用的方法是使用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))
可视化库Seaborn_第16张图片

hls_palette()函数来控制颜色的亮度和饱和
l-亮度 lightness
s-饱和 saturation

sns.palplot(sns.hls_palette(8, l=.7, 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)
可视化库Seaborn_第17张图片

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);
可视化库Seaborn_第18张图片

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

 

Seaborn-3Var

%matplotlib inline
import numpy as np
import pandas as pd
from scipy import stats, integrate
import matplotlib.pyplot as plt

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

x = np.random.normal(size=100)
sns.distplot(x,kde=False)
可视化库Seaborn_第19张图片

x
'''
array([ 0.97752209,  0.21994529,  1.15613215,  0.65223291, -0.5748041 ,
        0.15529892,  0.32819136, -0.52983823,  0.60642604, -0.75095403,
       -0.15975087,  0.13873173, -0.37420078, -0.66933013,  0.97879031,
        1.39975046, -0.69109644, -1.71275999, -0.98069174,  0.04053801,
       -0.08993049, -0.21894432,  0.95007978,  0.04834565,  0.7594089 ,
        0.60660518, -1.04920173, -0.11541744, -0.15526694,  1.47822792,
       -1.36072685, -0.45489649, -0.3327011 ,  0.61143769, -1.64781917,
        0.04655565, -0.09984121,  0.23188707, -1.18274658, -0.66297796,
       -0.80121788, -0.25074193,  0.13970127,  0.82166008, -0.12297872,
        0.2372636 ,  1.46122763,  0.59616042, -1.85714625,  1.27880682,
       -1.45718971, -0.68239548,  0.0419499 , -0.38886254, -0.36657596,
       -0.5210484 ,  0.59571555,  0.26732394, -0.67206209, -1.9304416 ,
        0.59615679, -1.00097477,  0.80460921, -0.10346389,  0.60495096,
       -1.0529459 ,  0.96063664,  0.77417928, -1.80310065, -2.25505873,
       -0.10676567, -1.60643438,  0.6203414 , -1.05387172, -0.24499961,
       -1.35825235, -1.02115073,  1.02619575,  0.31307791,  1.12870088,
       -0.05591163,  0.88423656,  0.47052053,  0.00631765, -0.64831749,
       -2.17714683, -0.3308601 ,  0.68436603,  0.32375091, -0.21378255,
        0.1867279 , -2.07346476,  0.10669616, -0.72691788,  1.42268722,
       -0.71936773,  0.65605735,  0.13668725, -0.17619063, -0.97891862])
'''

sns.distplot(x, bins=20, kde=False) # bins=20 设置切分 20 份
可视化库Seaborn_第20张图片
# 数据分布情况
x = np.random.gamma(6, size=200)
sns.distplot(x, kde=False, fit=stats.gamma)
可视化库Seaborn_第21张图片
# 根据均值和协方差生成数据
mean, cov = [0, 1], [(1, .5), (.5, 1)]
data = np.random.multivariate_normal(mean, cov, 200)
df = pd.DataFrame(data, columns=["x", "y"]) # 将 numpy.ndarray 转化为 pandas.core.frame.DataFrame
df.head()
可视化库Seaborn_第22张图片

观测两个变量之间的分布关系最好用散点图
sns.jointplot(x="x", y="y", data=df);
可视化库Seaborn_第23张图片

x, y = np.random.multivariate_normal(mean, cov, 10000).T
with sns.axes_style("white"):
    sns.jointplot(x=x, y=y, color="r")
可视化库Seaborn_第24张图片

# 当散点图的点太多,占满整张图时,可以使用 hex 图,通过颜色深浅来判断
x, y = np.random.multivariate_normal(mean, cov, 10000).T
with sns.axes_style("white"):
    sns.jointplot(x=x, y=y, kind="hex", color="r")
可视化库Seaborn_第25张图片

 

4-REG

%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() 可视化库Seaborn_第26张图片
# regplot()和lmplot()都可以绘制回归关系,推荐regplot()
sns.regplot(x="total_bill", y="tip", data=tips)
可视化库Seaborn_第27张图片

sns.lmplot(x="total_bill", y="tip", data=tips);
可视化库Seaborn_第28张图片

sns.regplot(data=tips,x="size",y="tip")
可视化库Seaborn_第29张图片

sns.regplot(x="size", y="tip", data=tips, x_jitter=.05) # x_jitter 在原始的数据值范围内抖动
可视化库Seaborn_第30张图片

anscombe = sns.load_dataset("anscombe")
sns.regplot(x="x", y="y", data=anscombe.query("dataset == 'I'"),
           ci=None, scatter_kws={"s": 100})
可视化库Seaborn_第31张图片

sns.lmplot(x="x", y="y", data=anscombe.query("dataset == 'II'"),
           ci=None, scatter_kws={"s": 80})
可视化库Seaborn_第32张图片

sns.lmplot(x="x", y="y", data=anscombe.query("dataset == 'II'"),
           order=2, ci=None, scatter_kws={"s": 80});
可视化库Seaborn_第33张图片

sns.lmplot(x="total_bill", y="tip", hue="smoker", data=tips);
可视化库Seaborn_第34张图片

sns.lmplot(x="total_bill", y="tip", hue="smoker", data=tips,
           markers=["o", "x"], palette="Set1");
可视化库Seaborn_第35张图片

sns.lmplot(x="total_bill", y="tip", hue="smoker", col="time", data=tips);
可视化库Seaborn_第36张图片

sns.lmplot(x="total_bill", y="tip", hue="smoker",
           col="time", row="sex", data=tips);
可视化库Seaborn_第37张图片

f, ax = plt.subplots(figsize=(5, 5))
sns.regplot(x="total_bill", y="tip", data=tips, ax=ax);
可视化库Seaborn_第38张图片

col_wrap:“Wrap” the column variable at this width, so that the column facets span multiple rows
size :Height (in inches) of each facet
sns.lmplot(x="total_bill", y="tip", col="day", data=tips,
           col_wrap=2, size=4);
可视化库Seaborn_第39张图片

sns.lmplot(x="total_bill", y="tip", col="day", data=tips,
           aspect=.8);
可视化库Seaborn_第40张图片

 

 

5-category

%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(style="whitegrid", color_codes=True)
np.random.seed(sum(map(ord, "categorical")))
titanic = sns.load_dataset("titanic")
tips = sns.load_dataset("tips")
iris = sns.load_dataset("iris")

sns.stripplot(x="day", y="total_bill", data=tips);
可视化库Seaborn_第41张图片
# 重叠是很常见的现象,但是重叠影响我观察数据的量了
sns.stripplot(x="day", y="total_bill", data=tips, jitter=True)
可视化库Seaborn_第42张图片

sns.swarmplot(x="day", y="total_bill", data=tips)
可视化库Seaborn_第43张图片

sns.swarmplot(x="day", y="total_bill", hue="sex",data=tips)
可视化库Seaborn_第44张图片

sns.swarmplot(x="total_bill", y="day", hue="time", data=tips);
可视化库Seaborn_第45张图片

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

sns.boxplot(x="day", y="total_bill", hue="time", data=tips);
可视化库Seaborn_第46张图片
 
sns.violinplot(x="total_bill", y="day", hue="time", data=tips);
可视化库Seaborn_第47张图片

sns.violinplot(x="day", y="total_bill", hue="sex", data=tips, split=True);
可视化库Seaborn_第48张图片

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_第49张图片
# 显示值的集中趋势可以用条形图
sns.barplot(x="sex", y="survived", hue="class", data=titanic);
可视化库Seaborn_第50张图片
# 点图可以更好的描述变化差异
sns.pointplot(x="sex", y="survived", hue="class", data=titanic);
可视化库Seaborn_第51张图片

sns.pointplot(x="class", y="survived", hue="sex", data=titanic,
              palette={"male": "g", "female": "m"},
              markers=["^", "o"], linestyles=["-", "--"]);
可视化库Seaborn_第52张图片
# 宽形数据
sns.boxplot(data=iris,orient="h");
可视化库Seaborn_第53张图片
# 多层面板分类图
sns.factorplot(x="day", y="total_bill", hue="smoker", data=tips)
可视化库Seaborn_第54张图片

sns.factorplot(x="day", y="total_bill", hue="smoker", data=tips, kind="bar")
可视化库Seaborn_第55张图片

sns.factorplot(x="day", y="total_bill", hue="smoker",
               col="time", data=tips, kind="swarm")
可视化库Seaborn_第56张图片

sns.factorplot(x="time", y="total_bill", hue="smoker",
               col="day", data=tips, kind="box", size=4, aspect=.5)
可视化库Seaborn_第57张图片

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

 

 

6-FacetGrid

%matplotlib inline
import numpy as np
import pandas as pd
import seaborn as sns
from scipy import stats
import matplotlib as mpl
import matplotlib.pyplot as plt

sns.set(style="ticks")
np.random.seed(sum(map(ord, "axis_grids")))

tips = sns.load_dataset("tips")
tips.head()
可视化库Seaborn_第58张图片

g = sns.FacetGrid(tips, col="time")
可视化库Seaborn_第59张图片

g = sns.FacetGrid(tips, col="time")
g.map(plt.hist, "tip");
可视化库Seaborn_第60张图片

g = sns.FacetGrid(tips, col="sex", hue="smoker")
g.map(plt.scatter, "total_bill", "tip", alpha=.7)
g.add_legend();
可视化库Seaborn_第61张图片

g = sns.FacetGrid(tips, row="smoker", col="time", margin_titles=True)
g.map(sns.regplot, "size", "total_bill", color=".1", fit_reg=False, x_jitter=.1);
可视化库Seaborn_第62张图片

g = sns.FacetGrid(tips, col="day", size=4, aspect=.5)
g.map(sns.barplot, "sex", "total_bill");
可视化库Seaborn_第63张图片
from pandas import Categorical
ordered_days = tips.day.value_counts().index
print (ordered_days)
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");
可视化库Seaborn_第64张图片

pal = dict(Lunch="seagreen", Dinner="gray")
g = sns.FacetGrid(tips, hue="time", palette=pal, size=5)
g.map(plt.scatter, "total_bill", "tip", s=50, alpha=.7, linewidth=.5, edgecolor="white")
g.add_legend();
可视化库Seaborn_第65张图片

g = sns.FacetGrid(tips, hue="sex", palette="Set1", size=5, hue_kws={"marker": ["^", "v"]})
g.map(plt.scatter, "total_bill", "tip", s=100, linewidth=.5, edgecolor="white")
g.add_legend();
可视化库Seaborn_第66张图片

with sns.axes_style("white"):
    g = sns.FacetGrid(tips, row="sex", col="smoker", margin_titles=True, size=2.5)
g.map(plt.scatter, "total_bill", "tip", color="#334488", edgecolor="white", lw=.5);
g.set_axis_labels("Total bill (US Dollars)", "Tip");
g.set(xticks=[10, 30, 50], yticks=[2, 6, 10]);
g.fig.subplots_adjust(wspace=.02, hspace=.02);
#g.fig.subplots_adjust(left  = 0.125,right = 0.5,bottom = 0.1,top = 0.9, wspace=.02, hspace=.02)
可视化库Seaborn_第67张图片

iris = sns.load_dataset("iris")
g = sns.PairGrid(iris)
g.map(plt.scatter);
可视化库Seaborn_第68张图片

g = sns.PairGrid(iris)
g.map_diag(plt.hist)
g.map_offdiag(plt.scatter);
可视化库Seaborn_第69张图片

g = sns.PairGrid(iris, hue="species")
g.map_diag(plt.hist)
g.map_offdiag(plt.scatter)
g.add_legend();
可视化库Seaborn_第70张图片

g = sns.PairGrid(iris, vars=["sepal_length", "sepal_width"], hue="species")
g.map(plt.scatter);
可视化库Seaborn_第71张图片

g = sns.PairGrid(tips, hue="size", palette="GnBu_d")
g.map(plt.scatter, s=50, edgecolor="white")
g.add_legend();
可视化库Seaborn_第72张图片

 

 

 

7-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)
'''
[[0.5488135  0.71518937 0.60276338]
 [0.54488318 0.4236548  0.64589411]
 [0.43758721 0.891773   0.96366276]]
'''
可视化库Seaborn_第73张图片

ax = sns.heatmap(uniform_data, vmin=0.2, vmax=0.5)
可视化库Seaborn_第74张图片

normal_data = np.random.randn(3, 3)
print (normal_data)
ax = sns.heatmap(normal_data, center=0)
'''
[[ 1.26611853 -0.50587654  2.54520078]
 [ 1.08081191  0.48431215  0.57914048]
 [-0.18158257  1.41020463 -0.37447169]]
'''
可视化库Seaborn_第75张图片

flights = sns.load_dataset("flights")
flights.head()
可视化库Seaborn_第76张图片

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  
'''
可视化库Seaborn_第77张图片

ax = sns.heatmap(flights, annot=True,fmt="d")
可视化库Seaborn_第78张图片

ax = sns.heatmap(flights, linewidths=.5)
可视化库Seaborn_第79张图片

ax = sns.heatmap(flights, cmap="YlGnBu")
可视化库Seaborn_第80张图片

ax = sns.heatmap(flights, cbar=False)
可视化库Seaborn_第81张图片

 

 

 

iris = sns.load_dataset("iris")
sns.pairplot(iris)
可视化库Seaborn_第82张图片

你可能感兴趣的:(可视化库Seaborn)