seaborn

画图整体风格的确定

import seaborn as sns
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
%matplotlib inline

# 画不同的sin曲线图
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)
# sns默认风格
sns.set()
'''
5种主题风格
darkgrid
whitegrid
dark
white
ticks
'''
sns.set_style("darkgrid")
sinplot()
sns.set_style("whitegrid")
sinplot()
sns.set_style("dark")
sinplot()
sns.set_style("white")
sinplot()
sns.set_style("ticks")
sinplot()

# 去掉上面和右边的边框
sinplot()
sns.despine()

# 设置图距离原点的偏移
sns.despine(offset=10)

# 再去掉左边轴
sns.despine(left=True)

# 指定风格
with sns.axes_style("darkgrid"):
    plt.subplot(211)
    sinplot()

# 指定整体画风的大小
sns.set_context("paper")
sns.set_context("talk")
sns.set_context("poster")
sns.set_context("notebook", font_scale=1.5, rc={"lines.linewidth": 2.5}) # 指定画图线条的粗细

调色板

# sns默认色调
current_palette = sns.color_palette()
sns.palplot(current_palette)

# 超过6个种类,使用圆形画板,hls颜色空间均匀分割
sns.palplot(sns.color_palette("hls", 8))
# l:调节亮度;s:调节饱和度
sns.palplot(sns.hls_palette(8, l=.7, s=.9))


# 使用在画图中
data = np.random.normal(size=(20, 8)) + np.arange(8) / 2
sns.boxplot(data=data,palette=sns.color_palette("hls", 8))

# 颜色对比
sns.palplot(sns.color_palette("Paired",12))

# 你把颜色命名记住,就能用xkcd来指定颜色了
colors = ["windows blue", "amber", "greyish", "faded green", "dusty purple"]
sns.palplot(sns.xkcd_palette(colors))

# 渐变颜色
sns.palplot(sns.color_palette("Blues"))
# 反转
sns.palplot(sns.color_palette("BuGn_r"))

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

# 和上面渐变一样,但是你能指定
sns.palplot(sns.light_palette("green"))
sns.palplot(sns.dark_palette("purple"))
sns.palplot(sns.light_palette("navy", reverse=True))

单变量特征分析

特征分布

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)
# 指定bins
sns.distplot(x, bins=20, kde=False)


# 散点图
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")

# 一次性画出两两的关系
sns.pairplot(iris)

多变量,回归分析

# 载入数据集
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")

# 画出回归图,两种形式,推荐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)

# 指定只画数据集中的某一类数据
anscombe = sns.load_dataset("anscombe")
anscombe.tail()
sns.regplot(x="x", y="y", data=anscombe.query("dataset == 'I'"),
           ci=None, scatter_kws={"s": 100})
# 非线性拟合,二次
sns.lmplot(x="x", y="y", data=anscombe.query("dataset == 'II'"),
           order=2, ci=None, scatter_kws={"s": 80});
# 分类别的进行对比
sns.lmplot(x="total_bill", y="tip", hue="smoker", data=tips);
sns.lmplot(x="total_bill", y="tip", hue="smoker", data=tips,
           markers=["o", "x"], palette="Set1");

# 横纵坐标对比
sns.lmplot(x="total_bill", y="tip", hue="smoker", col="time", data=tips);
sns.lmplot(x="total_bill", y="tip", hue="smoker",
           col="time", row="sex", data=tips);

数据重叠,增加抖动

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);
# 给每个点随机的增加抖动,让其错开一点
sns.stripplot(x="day", y="total_bill", data=tips, jitter=True)
# 把数据均匀展开
sns.swarmplot(x="day", y="total_bill", data=tips)

盒图,查看异常离群点

# 绘制盒图
sns.boxplot(x="day", y="total_bill", hue="time", data=tips);

# 绘制小提琴图
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=["-", "--"]);

多层面板分类图,只需要指定kind

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")
sns.factorplot(x="time", y="total_bill", hue="smoker",
               col="day", data=tips, kind="box", size=4, aspect=.5)

 

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

展示子集FacetGrid

# 加载数据
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")

# 实例化
g = sns.FacetGrid(tips, col="time")
# 画图,指定要画啥
g.map(plt.hist, "tip");
# 画散点图,指定点的透明程度以及类别
g = sns.FacetGrid(tips, col="sex", hue="smoker")
g.map(plt.scatter, "total_bill", "tip", alpha=.7)
g.add_legend();
# 指定画图的顺序
from pandas import Categorical
ordered_days = tips.day.value_counts().index
# 自己指定顺序
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");


# 自己制定调色板颜色
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();

# 制定画数据的形状
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();

# 设置x,y轴的名字
# 设置x,y轴的取值
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);

# 画出全部的两两的图,并指定对角线以及非对角线的图
iris = sns.load_dataset("iris")
g = sns.PairGrid(iris)
g.map(plt.scatter);

热力图

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值