%matplotlib inline 是一个魔法函数(Magic Functions)。

官方给出的定义是:IPython有一组预先定义好的所谓的魔法函数(Magic Functions),你可以通过命令行的语法形式来访问它们。可见“%matplotlib inline”就是模仿命令行来访问magic函数的在IPython中独有的形式。

magic函数分两种:一种是面向行的,另一种是面向单元型的。

行magic函数 是用前缀“%”标注的,很像我们在系统中使用命令行时的形式,例如在Mac中就是你的用户名后面跟着“$”。“%”后面就是magic函数的参数了,但是它的参数是没有被写在括号或者引号中来传值的。

单元型magic函数 是由两个“%%”做前缀的,它的参数不仅是当前“%%”行后面的内容,也包括了在当前行以下的行。

注意:既然是IPython的内置magic函数,那么在Pycharm中是不会支持的。所以,大多数错误,主要是这个原因。

 

 

什么是Seaborn

Seaborn是基于matplotlib的图形可视化python包。它提供了一种高度交互式界面,便于用户能够做出各种有吸引力的统计图表。

Seaborn是在matplotlib的基础上进行了更高级的API封装,从而使得作图更加容易,在大多数情况下使用seaborn能做出很具有吸引力的图,而使用matplotlib就能制作具有更多特色的图。

应该把Seaborn视为matplotlib的补充,而不是替代物。同时它能高度兼容numpy与pandas数据结构以及scipy与statsmodels等统计模式。

pip安装seaborn:

C:\Users\jason>  pip install seaborn

 

import seaborn as sns
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
%matplotlib inline
# 自定义函数:6条正弦函数曲线
def sinplot(flip=10):
    x = np.linspace(0, 14, 100)
    for i in range(1, 7):
        plt.plot(x, np.sin(x + i * .5) * (7 - i) * flip)
# 调用自定义函数
sinplot()

 

设置x轴标注的显示角度rotation=90度

plt.xticks(rotation=90)
sns.violinplot(y='is_cos',x='dest_aoi',data=yyds_df,saturation=1.75)

 

 

 1、sns.set()设置风格

seaborn.set()函数参数:seaborn.set(context=‘notebook’, style=‘darkgrid’, palette=‘deep’, font=‘sans-serif’, font_scale=1, color_codes=True, rc=None)

set()函数,通过它我们可以设置背景色、风格、字型、字体等。

sns.set()
sinplot()

2、 sns.set_style('xx')   设置主题风格

5种主题风格

  • darkgrid
  • whitegrid
  • dark
  • white
  • ticks
sns.set_style('whitegrid')
sinplot()

sns.set_style('darkgrid')
sinplot()

sns.set_style('dark')
sinplot()

sns.set_style('white')
sinplot()

sns.set_style('ticks')
sinplot()

2.1   sns.boxplot() # 箱型图:它能显示出一组数据的最大值、最小值、中位数及上下四分位数

# sns.set_style('xx')  # 设置主题风格:白色网格
sns.set_style('whitegrid')
# np.random.normal(size=(n*m*k))   # 生成正太分布值,n*m*k的矩阵
# arange([start=0,] stop[, step=1,], dtype=None, *, like=None)  # 生成[0,stop)步长为1的数组,如[0,1,2,3,4,5]
data = np.random.normal(size=(20, 6)) + np.arange(6) / 2
print(data)
# sns.boxplot()   # 箱型图:它能显示出一组数据的最大值、最小值、中位数及上下四分位数
sns.boxplot(data=data)

2.2  sns.violinplot()  小提琴绘图以基础分布的核密度估计为特征

data.head(6)

sns.violinplot(x='gender', y='age', data=data)

 

 2.3  sns.despine()   是否隐藏轴线

sns.despine()会删除上、右坐标轴; 
sns.despine(offset=200, trim=True) 只展示下坐标轴,图与轴线偏移200;
sns.despine(left=True, right = False) #left=True是左边不显示;right=False是显示;
sns.violinplot(data)

sns.violinplot(data)
sns.despine(offset=200, trim=True)

 

2.4  sns.boxplot()  箱线图

# palette 默认6种颜色:deep, muted, pastel, bright, dark, colorblind

sns.set_style('whitegrid')
# sns.boxplot()  箱线图
# palette 默认6种颜色:deep, muted, pastel, bright, dark, colorblind
sns.boxplot(data=data, palette='pastel')
sns.despine(left=True)  # 隐藏左坐标轴,ps:despine默认会隐藏上、右坐标轴

# sns.boxplot()  箱线图
# IQR: 统计学概念,四分位距,第(1/4)分位与第(3/4)分位之间的距离
# N= 1.5 * IQR         如果一个值>Q3+N   或 <Q1-N,则为离群点
sns.boxplot(x='day', y='total_bill', hue='time', data=tips)

# 箱线图
iris
sns.boxplot(data=iris.data, orient='h')

 

 

 

2.5.1 sns.set_style() 设置图表风格

sns.set_style('whitegrid')
# sns.boxplot()  箱线图
# palette 默认6种颜色:deep, muted, pastel, bright, dark, colorblind
sns.boxplot(data=data, palette='bright')
sns.despine(left=True)  # 隐藏左坐标轴,ps:despine默认会隐藏上、右坐标轴

  •  with 语句适用于对资源进行访问的场合,确保不管使用过程中是否发生异常都会执行必要的“清理”操作,释放资源,比如文件使用后自动关闭/线程中锁的自动获取和释放等。

2.5.2 sns.axes_style

with open('1.txt') as file:
    data = file.read()
# with 语句适用于对资源进行访问的场合,
# 确保不管使用过程中是否发生异常都会执行必要的“清理”操作,释放资源,
# 比如文件使用后自动关闭/线程中锁的自动获取和释放等。

# sns.axes_style('darkgrid')  设置seaborn绘图风格
# 五种seaborn的style风格:darkgrid, whitegrid, dark, white, tick。默认的主题是darkgrid。
# plt.figure(figsize=(x,y))  # 设置画板尺寸
plt.figure(figsize=(12,8))
with sns.axes_style('darkgrid'):
    # plt.subplot(n,m,k)  # 绘制n*m子图的第k个子图
    plt.subplot(2,1,1)
    sinplot()
    
plt.subplot(2,1,2)
sinplot()

 

 

2.5.3  sns.set()设置风格

seaborn.set()函数参数:seaborn.set(context=‘notebook’, style=‘darkgrid’, palette=‘deep’, font=‘sans-serif’, font_scale=1, color_codes=True, rc=None)

从这个set()函数,可以看出,通过它我们可以设置背景色、风格、字型、字体等。

  •      context   四种预设,按相对尺寸的顺序(线条越来越粗),分别是paper,notebook, talk, and poster。notebook的样式是默认的。
  •      style       五种seaborn的style风格:darkgrid, whitegrid, dark, white, ticks。默认的主题是darkgrid。
# 定义画板尺寸
plt.figure(figsize=(10,8))
context_cats = ['paper', 'notebook', 'talk', 'poster']
for i in range(0,4):
    plt.subplot(4,1,i+1)
    sns.set_context(context_cats[i])
    sinplot()   # 线条越来越粗

# 定义画板尺寸
plt.figure(figsize=(18,16))
context_cats = ['paper', 'notebook', 'talk', 'poster']
style_cats = ['darkgrid', 'whitegrid', 'dark', 'white', 'ticks']
k = 0
for i in range(0,4):
    for j in range(0,5):
        k += 1
        # context=context_cats[i],style=style_cats[j]
        #plt.figure(figsize=(12,10))
        sns.set_context(context=context_cats[i])
        with sns.axes_style(style=style_cats[j]):
            plt.subplot(20,1,k)
            sinplot()
        

 

 二、调色板

调色板

  • 颜色很重要
  • color_palette()能传入任何Matplotlib所支持的颜色
  • color_palette()不写参数则默认颜色
  • set_palette()设置所有图的颜色
颜色空间   {'rgb', 'hls', 'husl', xkcd'}

RGB  = seaborn.color_palette(palette = None, n_colors = None, desat = None)    调色盘

 RGB   6个默认的颜色循环主题: deep, muted, pastel, bright, dark, colorblind

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
sns.set(rc={'figure.figsize':(6,6)})
# sns.color_palette() 设置调色盘,返回颜色值数组
current_palette = sns.color_palette()
# sns.palplot() 将调色板中的数组值水平绘制颜色块
sns.palplot(current_palette)

 

 1、  hls 颜色空间 

1.1  sns.color_palette()

 

# hls 颜色空间
#help(sns.palplot)
# 查看hls颜色空间的12个颜色
sns.palplot(sns.color_palette('hls',12))

 1.2  sns.color_palette('hls',8)   # ‘hls’颜色空间的8个颜色值

# np.random.normal(size=(x,y))   # 生成正态分布矩阵x*y
data = np.random.normal(size=(20,8)) + np.arange(8)/2
# print(data)
# help(sns.color_palette)
# sns.boxplot()   # 箱线图
# sns.color_palette('hls',8)   # ‘hls’颜色空间的8个颜色值
sns.boxplot(data=data, palette=sns.color_palette('hls',8))

 

 1.3  sns.hls_palette(num, l=lightValue, s=saturationValue)   # 控制颜色的亮度和饱和度

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

  • l-亮度 lightness
  • s-饱和 saturation
# sns.hls_palette(num, l=lightValue, s=saturationValue)   # 控制颜色的亮度和饱和度
sns.palplot(sns.hls_palette(8, l=0.6, s=0.8))

 

 2、Paired 颜色空间

# Paired 颜色空间
sns.palplot(sns.color_palette('Paired', 8))

 

 3、xkcd 颜色空间

# xkcd 颜色空间
# xkcd包含954个可以随时通过xdcd_rgb字典中调用的命名颜色。

# xkcd 颜色空间
# xkcd包含954个可以随时通过xdcd_rgb字典中调用的命名颜色。
plt.plot([0,1],[0,1], sns.xkcd_rgb['pale red'],lw=3)   # lw设置线粗细
plt.plot([0,1],[0,2], sns.xkcd_rgb['medium green'])
plt.plot([0,1],[0,3], sns.xkcd_rgb['denim blue'],lw=6)

 

 3.1  sns.xkcd_palett(arr)    # 获取xkcd颜色空间的某些颜色值

# type(sns.xkcd_rgb)   # dict
# sns.xkcd_palett(arr)    # 获取xkcd颜色空间的某些颜色值
colors = ['windows blue', 'amber', 'greyish', 'faded green', 'dusty purple']
sns.palplot(sns.xkcd_palette(colors))

 

 4、 连续色板.

'Blues'、'BuGn'

# 连续色板
sns.palplot(sns.color_palette('Blues'))

# 如果想要翻转渐变,可以在面板名称中添加一个_r后缀
sns.palplot(sns.color_palette('Blues_r'))

sns.palplot(sns.color_palette('BuGn'))
sns.palplot(sns.color_palette('BuGn_r'))

4.1  light_palette() 和dark_palette()

sns.palplot(sns.light_palette('green'))
sns.palplot(sns.light_palette('purple'))
sns.palplot(sns.light_palette('red'))
sns.palplot(sns.light_palette('blue'))
sns.palplot(sns.light_palette('orange'))

sns.palplot(sns.light_palette('navy'))
sns.palplot(sns.light_palette('navy',n_colors=8, reverse=True))

sns.palplot(sns.dark_palette('green'))
sns.palplot(sns.dark_palette('purple'))
sns.palplot(sns.dark_palette('orange'))
sns.palplot(sns.dark_palette('orange', reverse=True))

 5、cubehelix_palette()   # 色调变换

# cubehelix_palette()   # 色调变换
sns.palplot(sns.color_palette('cubehelix', 8))
sns.palplot(sns.color_palette('cubehelix_r',8))

# sns.cubehelix_palette()
sns.palplot(sns.cubehelix_palette(8, start=0.95, rot=-0.830))   # 0 <= start <= 3

sns.palplot(sns.cubehelix_palette(8, start=0.55, rot=-0.15))

 

 6、输入颜色元组,定义调色板

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

 

 三、图表

1、  sns.distplot() 绘制直方图

np.random.seed(8)  # # 传入seed一个固定值参数,会得到固定的random随机返回值
# np.random.normal(size=n)  # 生产包含n个正态分布值的数组
x = np.random.normal(size=100)

fig,axes = plt.subplots(1,3)  # 创建一个1行3列的图表
fig.set_size_inches((14,8))

# 绘制直方图axes[0]
sns.distplot(x, ax=axes[0])

# sns.distplot() 绘制直方图axes[1]
sns.distplot(x, ax=axes[1], hist=False)   # hist=False 不显示直方图

# 绘制直方图axes[2]
sns.distplot(x, ax=axes[2], kde=False)    # kde=False  不显示核密度

 

# numpy.random.gamma(shape, scale=1.0, size=None) 从伽玛分布中获取随机样本,并使用此方法返回随机样本。
x = np.random.gamma(3, size=200)
fig,axes = plt.subplots(1,3)
fig.set_size_inches(16,8)
sns.distplot(x, ax=axes[0], kde=False)        # kde=False  不显示核密度
sns.distplot(x, ax=axes[1], fit=stats.gamma)  # 显示gamma曲线、和 核密度曲线
sns.distplot(x, ax=axes[2], kde=False, fit=stats.gamma)  # 不显示核密度, 显示gamma曲线
plt.show()

 

 2、sns.jointplot() 散点图

np.random.multivariate_normal 方法用于根据实际情况生成一个多元正态分布矩阵

numpy.random.multivariate_normal(mean, cov[, size, check_valid, tol])
  • mean:均值,n维分布的平均值,是一个一维数组长度为N.在标准正态分布里对应的就是图形的峰值。
  • cov:分布的协方差矩阵,它的形状必须是(n,n),也就是必须是一个行数和列数相等的类似正方形矩阵,它必须是对称的和正半定的,才能进行适当的采样。
  • size:指定生成样本的大小,是一个int类型或者int类型的元组。可选。例如,给定(m,n,k)的形状,则会生成m*n*k样本,并按m-x-n-x-k排列打包。因为每个样本都是N维的,所以输出形状是(m,n,k,N)。如果未指定形状,则返回单个(N-d)样本。
    •   在这里需要说明的是mean和cov必须有相同的长度,否则编译的时候会报错。比如mean=[0,0],cov=[[1,0,0],[0,1,0],[0,0,1]],这样是不可以的因为mean的长度为2,而cov的形状是(3,3),这样在编译的时候会产生一个ValueError: mean and cov must have same length错误。再结合size中的例子,如果size指定(3,3)的元组,mean=[1,2],cov=[[1,0],[0,100]],那么输出的形状就是(3,3,2).(例:若size=(1, 1, 2),则输出的矩阵的shape即形状为 1X1X2XN(N为mean的长度))。
  • check_valid:可以为{'warn'、'raise'、'ignore'},可选,来指定协方差矩阵非正半定时的行为。
  • tol:浮点型,可选。检查协方差矩阵中的奇异值时的公差。
x, y = np.random.multivariate_normal(mean, cov, 1000).T

# kind:{ “scatter” | “kde” | “hist” | “hex” | “reg” | “resid” }
# kind:{ “散点” | “核密度” | “方块” | “六边” | “线性回归” | “resid” }
sns.jointplot(x=x, y=y, kind='hex')

# 绿色
# sns.jointplot(x=x, y=y, color='g')

sns.jointplot(x=x, y=y, color='g', kind='kde')
sns.jointplot(x=x, y=y, color='g')

 

 

 3、sns.pairplot()  多变量图

# sns.pairplot

import pandas as pd
from sklearn import datasets
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
sns.set_style('white',{'font.sans-serif':['simhei','Arial']})  # 解决中文不能显示问题

# iris = sns.load_dataset("iris")    # 数据导入方式1
iris = datasets.load_iris()          # 数据导入方式2
# type(iris)                         # sklearn.utils.Bunch

#print(iris.data[:3,:])
#print(iris.feature_names)   # ['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']
#print(iris.target)          # 种类:0,1,2
#print(iris.target_names)     # ['setosa' 'versicolor' 'virginica']


iris_df = pd.DataFrame(iris.data, columns=iris.feature_names)
iris_df['species'] = iris.target_names[iris.target]

iris_df.rename(columns={
    "sepal length (cm)":"萼片长",
    "sepal width (cm)":"萼片宽",
    "petal length (cm)":"花瓣长",
    "petal width (cm)":"花瓣宽",
    "species":"种类"
}, inplace=True)

kind_dict = {
    "setosa":"山鸢尾",
    "versicolor":"杂色鸢尾",
    "virginica":"维吉尼亚鸢尾"
}

iris_df['种类'] = iris_df['种类'].map(kind_dict)
sns.pairplot(iris_df)

可以看到对角线上是各个属性的直方图(分布图),而非对角线上是两个不同属性之间的相关图,
从图中我们发现,花瓣的长度和宽度之间以及萼片的长短和花瓣的长、宽之间具有比较明显的相关关系

  

# kind: 用于控制非对角线上图的类型,可选'scatter'与'reg'
# diag_kind:用于控制对角线上的图类型,可选'hist' 与 'kde'

sns.pairplot(iris_df, kind='reg', diag_kind='ked')
sns.pairplot(iris_df, kind='reg', diag_kind='hist')

 

 

# hue: 按指定字段进行分类
sns.pairplot(iris_df, hue='种类')
sns.pairplot(iris_df, hue='种类', diag_kind='hist',kind='reg')

经过hue分类后的pairplot中发现,不论是从对角线上的分布图还是从分类后的散点图,
都可以看出对于不同种类的花,其萼片长、花瓣长、花瓣宽的分布差异较大,换句话说,
这些属性是可以帮助我们去识别不同种类的花的。
比如,对于萼片、花瓣长度较短,花瓣宽度较窄的花,那么它大概率是山鸢尾。

 

  

# vars:研究某2个或者多个变量之间的关系vars,

# x_vars,y_vars:选择数据中的特定字段,以list形式传入需要注意的是,x_vars和y_vars要同时指定

# vars: 研究某2个或者多个变量之间的关系。
# x_vars,y_vars: 选择数据中的特定字段,以list形式传入需要注意的是:x_vars和y_vars要同时指定

sns.pairplot(iris_df, vars=["萼片长","花瓣长"], hue='种类',kind='reg')
sns.pairplot(iris_df,x_vars=["萼片长","花瓣宽"],y_vars=["萼片宽","花瓣长"],hue='种类',kind='reg')

 

 

 

四、sns.heatmap()  变量关系热度图

import pandas as pd
import numpy as np
from sklearn.datasets import load_diabetes
from sklearn.model_selection import train_test_split,RandomizedSearchCV
from sklearn.metrics import accuracy_score,precision_score,recall_score,f1_score
from sklearn.ensemble import RandomForestClassifier,AdaBoostClassifier
import matplotlib.pyplot as plt
from sklearn.svm import SVC
import seaborn as sns

sns.set(style='ticks')

#import check_file as ch

%matplotlib inline

food_df = pd.read_csv('..//2-数据分析处理库pandas//food_info.csv')
food_df = food_df.drop('Shrt_Desc', axis=1)
food_df.head(1)
food_df.count()
print(food_df.columns)
Index(['NDB_No', 'Water_(g)', 'Energ_Kcal', 'Protein_(g)', 'Lipid_Tot_(g)',
       'Ash_(g)', 'Carbohydrt_(g)', 'Fiber_TD_(g)', 'Sugar_Tot_(g)',
       'Calcium_(mg)', 'Iron_(mg)', 'Magnesium_(mg)', 'Phosphorus_(mg)',
       'Potassium_(mg)', 'Sodium_(mg)', 'Zinc_(mg)', 'Copper_(mg)',
       'Manganese_(mg)', 'Selenium_(mcg)', 'Vit_C_(mg)', 'Thiamin_(mg)',
       'Riboflavin_(mg)', 'Niacin_(mg)', 'Vit_B6_(mg)', 'Vit_B12_(mcg)',
       'Vit_A_IU', 'Vit_A_RAE', 'Vit_E_(mg)', 'Vit_D_mcg', 'Vit_D_IU',
       'Vit_K_(mcg)', 'FA_Sat_(g)', 'FA_Mono_(g)', 'FA_Poly_(g)',
       'Cholestrl_(mg)'],
      dtype='object')

查看各个字段数据情况:非空总数,均值、标准差、最小值、1/4中位数、中位数、3/4中位数、最大值
food_df.describe()

#food_df = food_df.drop('Shrt_Desc', axis=1)
#food_df.head(1)
cols = ['NDB_No','Water_(g)', 'Energ_Kcal', 'Protein_(g)']
sns.pairplot(food_df[cols])
plt.savefig('./pairplot01.png')

查看两两字段间的关系

 

 

 查看两两字段间的关系热度图

sns.heatmap(food_df[cols].corr(), annot=True, cmap='YlGnBu')
plt.savefig('./heatmap01.png')

 

 五、图表类别

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

# D:\python\ml\seaborn-data-master
np.random.seed(sum(map(ord, 'categorical')))

# pandas的api: https://pandas.pydata.org/pandas-docs/stable/reference/io.html#excel
titanic = pd.read_table('D:\\python\\ml\\seaborn-data-master\\titanic.csv',sep=',')
tips = pd.read_csv('D:\\python\\ml\\seaborn-data-master\\tips.csv',sep=',')
# seaborn的api网址:http://seaborn.pydata.org/api.html
iris = sns.load_dataset('iris',data_home='D:\\python\\ml\\seaborn-data-master')

 

1、 sns.tripplot()  分布散点图

jitter:当数据点重合较多时,该参数可打散数据

# sns.tripplot()  分布散点图,jitter:当数据点重合较多时,该参数可打散数据
sns.stripplot(x='day', y='total_bill', data=tips, jitter=False)

# sns.tripplot()  分布散点图,jitter:当数据点重合较多时,该参数可打散数据
sns.stripplot(x='day', y='total_bill', data=tips, jitter=True)

 2、sns.swarmplot()    分簇散点图

# sns.swarmplot() 分簇散点图
sns.swarmplot(x='day', y='total_bill', hue='sex', data=tips)

# sns.swarmplot()  分簇散点图
sns.swarmplot(x='total_bill', y='day', hue='time', data=tips)

3、sns.boxplot()  箱线图

3.1.箱子的大小取决于数据的四分位距,即IQR = Q3 - Q1(Q3: 75%分位数 , Q1: 25%分位数 , Q3和Q1为四分位数)。50%的数据集中于箱体,若箱体太大即数据分布离散,数据波动较大,箱体小表示数据集中。

3.2.箱子的上边为上四分位数Q3,下边为下四分位数Q1,箱体中的横线为中位数Q2(50%分位数)

3.3.箱子的上触须为数据的最大值Max,下触须为数据的最小值Min(注意是非离群点的最大最小值,称为上下相邻值)

3.4.若数据值 > Q3+1.5 * IQR(上限值) 或 数据值 < Q1-1.5 * IQR(下限值) ,均视为异常值。数据值 > Q3+3 * IQR 或 数据值 < Q1-3 * IQR ,均视为极值。在实际应用中,不会显示异常值与极值的界限,而且一般统称为异常值。

  • 也表明上下触须不一定是数据的最大最小值,
  • (1)若数据的最大值比上限值小的,那么上触须顶点就是观察到的最大的;若数据的最大值比上限值大的,那么上触须顶点就是上限值,观察到的最大值就是异常点。
  • (2)若数据的最小值比下限值大的,那么下触须顶点就是观察到的最小值;若数据的最小值比下限值小的,那么下触须顶点就是下限值,观察到的最小值就是异常点。
  • 上述情况复杂,在线范围外的,直接理解成异常值即可

3.5.偏度:

  • 对称分布:中位线在箱子中间,上下相邻值到箱子的距离等长,离群点在上下限值外的分布也大致相同。
  • 右偏分布:中位数更靠近下四分位数,上相邻值到箱子的距离比下相邻值到箱子的距离长,离群点多数在上限值之外。
  • 左偏分布:中位数更靠近上四分位数,下相邻值到箱子的距离比上相邻值到箱子的距离长,离群点多数在下限值之外。
# sns.boxplot()  箱线图
# IQR: 统计学概念,四分位距,第(1/4)分位与第(3/4)分位之间的距离
# N= 1.5 * IQR         如果一个值>Q3+N   或 <Q1-N,则为离群点
sns.boxplot(x='day', y='total_bill', hue='time', data=tips)

# sns.boxplot()  箱线图
# IQR: 统计学概念,四分位距,第(1/4)分位与第(3/4)分位之间的距离
# N= 1.5 * IQR         如果一个值>Q3+N   或 <Q1-N,则为离群点
sns.boxplot(x='day', y='total_bill', hue='time', data=tips)

# 箱线图
iris
sns.boxplot(data=iris.data, orient='h')

 

 4、violinplot() 小提琴图

小提琴图,其外围的曲线宽度代表数据点分布的密度,中间的箱线图则和普通箱线图表征的意义是一样的,代表着中位数、上下分位数、极差等。

# sns.violinplot()   小提琴图
# 小提琴图,其外围的曲线宽度代表数据点分布的密度,
# 中间的箱线图则和普通箱线图表征的意义是一样的,代表着中位数、上下分位数、极差等。
sns.violinplot(x='total_bill', y='day', hue='time', data=tips)

# sns.violinplot()   小提琴图
# 小提琴图,其外围的曲线宽度代表数据点分布的密度,
# 中间的箱线图则和普通箱线图表征的意义是一样的,代表着中位数、上下分位数、极差等。
plt.figure(figsize=(10,6))
sns.violinplot(x='total_bill', y='day', hue='time', data=tips)

# sns.violinplot()  小提琴图
plt.figure(figsize=(10,6))
sns.violinplot(x='day', y='total_bill', hue='sex', data=tips, split=True)

# 小提琴图 和 分簇散点图
# 不带装饰的小提琴图:inner=None
sns.violinplot(x='day', y='total_bill', data=tips, inner=None)
sns.swarmplot(x='day', y='total_bill', data=tips, color='w', alpha=0.6)

5、sns.barplot() 条形图

# 条形图
# 显示值的集中趋势可以用条形图
sns.barplot(x='Sex', y='Survived', hue='Pclass', data=titanic)

 

 6、sns.pointplot()   点图

# sns.pointplot() 点图: 可以更好的描述一个类别的变化差异
sns.pointplot(x='Sex', y='Survived', hue='Pclass', data=titanic)

# 点图:palette调色盘; marker:'^'箭头标记,'o'圆点标记;linestyles:'-'虚线、'--'实线
sns.pointplot(x='Pclass', y='Survived', hue='Sex', data=titanic,
             palette={'male': 'g', 'female': 'm'},
             markers=['^', 'o'], linestyles=['-', '--'])

 7、sns.factorplot()  多层面板分类图

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
# order 指定坐标标签顺序
# sns.factorplot()  多层面板分类图:点图
# order 指定坐标标签顺序: order=['Thur','Fri','Sat','Sun']
sns.factorplot(x='day', y='total_bill', hue='smoker', data=tips, order=['Thur','Fri','Sat','Sun'])

# 多层面板: 柱形图
sns.factorplot(x='day', y='total_bill', hue='smoker', data=tips, kind='bar',order=['Thur','Fri','Sat','Sun'])

# 多层面板:分簇散点图swarm
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)

 

 8、sns.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', data_home='D:\\python\\ml\\seaborn-data-master')
tips.head()

# sns.FacetGrid()  多绘图网格
sns.FacetGrid(tips, col='time')

# sns.FacetGrid   多绘图网格
g = sns.FacetGrid(tips, col='time')
g.map(plt.hist, 'tip')

# sns.FacetGrid   多绘图网格: 散点图plt.scatter
g = sns.FacetGrid(tips, col='sex', hue='smoker')
# matplotlib.pyplot的aip:https://matplotlib.org/stable/api/pyplot_summary.html
# plt.scatter: aplpha透明度
g.map(plt.scatter, 'total_bill', 'tip',alpha=.6)

# sns.FacetGrid  多绘图网格:sns.regplot 回归图
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)

# sns.FacetGrid()  多绘图网格:直方图 sns.barplot
g = sns.FacetGrid(tips, col='day', size=5, aspect=.4)
g.map(sns.barplot, 'sex', 'total_bill')

from pandas import Categorical
ordered_days = tips.day.value_counts().index
print(ordered_days)
ordered_days = Categorical(['Thur', 'Fri', 'Sat', 'Sun'])  # 自定义顺序
# sns.FacetGrid的api: http://seaborn.pydata.org/generated/seaborn.FacetGrid.html#seaborn.FacetGrid
g = sns.FacetGrid(tips, row='day', row_order=ordered_days,
                 size=1.7, aspect=4)
# sns.boxplot箱线图:http://seaborn.pydata.org/generated/seaborn.boxplot.html#seaborn.boxplot
g.map(sns.boxplot, 'total_bill')
CategoricalIndex(['Sat', 'Sun', 'Thur', 'Fri'], categories=['Thur', 'Fri', 'Sat', 'Sun'], ordered=False, dtype='category')

 

# 自定义调色板
pal = dict(Lunch='seagreen', Dinner='orange')
# sns.FacetGrid的api: http://seaborn.pydata.org/generated/seaborn.FacetGrid.html#seaborn.FacetGrid
g = sns.FacetGrid(tips, hue='time', palette=pal, size=5)
# plt.scatter散点图:https://matplotlib.org/stable/api/pyplot_summary.html
# 散点图x为total_bill,y为tip;透明度alpha,
g.map(plt.scatter, 'total_bill', 'tip', s=80, alpha=.4, linewidth=.1, edgecolor='white')
g.add_legend()

# sns.FacetGrid多绘图网格,按sex分类,palette定义调色,hue_kws定义分类的图案样式
g = sns.FacetGrid(tips, hue='sex', palette='Set1', size=5, hue_kws={'marker':['^', 'v']})
g.map(plt.scatter, 'total_bill', 'tip', s=100, linewidth=.7, edgecolor='white')
g.add_legend()

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 设置x,y轴名称
g.set_axis_labels('Total bill(US Dollars)', 'Tip')
# g.set(xticks, yticks)  设置x,y轴的刻度
g.set(xticks=[10,30,50], yticks=[2,6,10])
# fig.subplots_adjust  调整子图参数
g.fig.subplots_adjust(wspace=.2, hspace=.02, left=.09)

 

9、sns.PairGrid多变量关系绘图网格

planets = sns.load_dataset('planets', data_home='D:\\python\\ml\\seaborn-data-master\\')
g = sns.PairGrid(planets)
g.map(plt.scatter)

iris = sns.load_dataset('iris', data_home='D:\\python\\ml\\seaborn-data-master\\')
g = sns.PairGrid(iris)
g.map(plt.scatter)

# sns.PairGrid绘制成对关系图:  用iris数据集,绘制成对关系子图
g = sns.PairGrid(iris)
# g.map_diag  对角线上画图: plt.hist直方图
g.map_diag(plt.hist)
# g.map_offdiag 非对角线上画图: plt.scatter散点图
g.map_offdiag(plt.scatter)

# sns.PairGrid绘制成对关系子图:用iris数据集,绘制成对关系图,用species分类
g = sns.PairGrid(iris, hue='species')
# g.map_diag在对角线上绘图: 直方图plt.hist
g.map_diag(plt.hist)
# g.map_offdiag在非对角线上绘图:散点图plt.scatter
g.map_offdiag(plt.scatter)
# g.add_legend()  显示分类注解
g.add_legend()

 

# sns.PairGrid绘制成对关系子图:数据集iris的['sepal_length', 'sepal_width']属性对,分类hue
g = sns.PairGrid(iris, vars=['sepal_length', 'sepal_width'], hue='species')
# g.map绘图:plt.scatter散点图
g.map(plt.scatter)

# sns.PairGrid绘制成对关系子图:tips数据集,按size分类,调色板GnBu_d
g = sns.PairGrid(tips, hue='size', palette='GnBu_d')
# g.map绘图:plt.scatter散点图
# plt.scatter的参数:https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.scatter.html#matplotlib.pyplot.scatter
g.map(plt.scatter, s=50, edgecolor='red')
g.add_legend()

10、sns.heatmap热力图

%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(331)
import seaborn as sns
sns.set()

uniform_data = np.random.rand(3,3)
print(uniform_data)
# 安数组[n,m]的值显示颜色 heatmap
= sns.heatmap(uniform_data)
[[0.94667182 0.1159915  0.703641  ]
 [0.19201418 0.88967771 0.608804  ]
 [0.93697966 0.83787054 0.55610899]]

 

# sns.load_dataset()  加载数据到df
flights = sns.load_dataset('flights',data_home='D:\\python\\ml\\seaborn-data-master')
flights.head()

flights = sns.load_dataset('flights',data_home='D:\\python\\ml\\seaborn-data-master')

# flights[cols]
# 透视表 df.pivot('index', 'columns', 'values') 透视表
# https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.pivot.html
flights = flights.pivot('month', 'year', 'passengers')
flights

# seaborn.heatmap热力图API:
# http://seaborn.pydata.org/generated/seaborn.heatmap.html#seaborn.heatmap
ax = sns.heatmap(flights)

# sns.heatmap 热力图: annot=True显示各个cell数值,fmt设置字体格式
sns.heatmap(flights, annot=True, fmt='d')

 

# sns.heatmap(flights, linewidths=.5)  热力图设置分割线粗细
sns.heatmap(flights, linewidths=.5)

 

 

2. 颜色效果

cmap的参数如下:

Accent, Accent_r, Blues, Blues_r, BrBG, BrBG_r, BuGn, BuGn_r, BuPu, BuPu_r, CMRmap, CMRmap_r, Dark2, Dark2_r, GnBu(绿到蓝), GnBu_r, Greens, Greens_r, Greys, Greys_r, OrRd(橘色到红色), OrRd_r, Oranges, Oranges_r, PRGn, PRGn_r, Paired, Paired_r, Pastel1, Pastel1_r, Pastel2, Pastel2_r, PiYG, PiYG_r, PuBu, PuBuGn, PuBuGn_r, PuBu_r, PuOr, PuOr_r, PuRd, PuRd_r, Purples, Purples_r, RdBu, RdBu_r, RdGy, RdGy_r, RdPu, RdPu_r, RdYlBu, RdYlBu_r, RdYlGn, RdYlGn_r, Reds, Reds_r, Set1, Set1_r, Set2, Set2_r, Set3, Set3_r, Spectral, Spectral_r, Wistia(蓝绿黄), Wistia_r, YlGn, YlGnBu, YlGnBu_r, YlGn_r, YlOrBr, YlOrBr_r, YlOrRd(红橙黄), YlOrRd_r, afmhot, afmhot_r, autumn, autumn_r, binary, binary_r, bone, bone_r, brg, brg_r, bwr, bwr_r, cividis, cividis_r, cool, cool_r, coolwarm(蓝到红), coolwarm_r, copper(铜色), copper_r, cubehelix, cubehelix_r, flag, flag_r, gist_earth, gist_earth_r, gist_gray, gist_gray_r, gist_heat, gist_heat_r, gist_ncar, gist_ncar_r, gist_rainbow, gist_rainbow_r, gist_stern, gist_stern_r, gist_yarg, gist_yarg_r, gnuplot, gnuplot2, gnuplot2_r, gnuplot_r, gray, gray_r, hot, hot_r(红黄), hsv, hsv_r, icefire, icefire_r, inferno, inferno_r, jet, jet_r, magma, magma_r, mako, mako_r, nipy_spectral, nipy_spectral_r, ocean, ocean_r, pink, pink_r, plasma, plasma_r, prism, prism_r, rainbow, rainbow_r, rocket, rocket_r, seismic, seismic_r, spring, spring_r, summer (黄到绿), summer_r (绿到黄), tab10, tab10_r, tab20, tab20_r, tab20b, tab20b_r, tab20c, tab20c_r, terrain, terrain_r, twilight, twilight_r, twilight_shifted, twilight_shifted_r, viridis, viridis_r, vlag, vlag_r, winter, winter_r

# sns.heatmap 热力图,设置调色盘 cmap
# 颜色空间介绍:https://blog.csdn.net/ztf312/article/details/102474190
sns.heatmap(flights, cmap='YlGnBu')

#sns.heatmap热力图: cbar是否显示颜色条
sns.heatmap(flights, cbar=False, cmap='YlGnBu')

 11、sns.tsplot时间序列分析图

# help(seaborn.tsplot)
# seaborn.timeseries模块下的tsplot时间序列分析图

%matplotlib inline
import numpy as np
import pandas as pd
import seaborn as sns
np.random.seed(22)

# help(np.linspace)
# np.linspace(start,stop,num)指定间隔内的均匀间隔的数字。
x = np.linspace(0, 15, 31)
x
array([ 0. ,  0.5,  1. ,  1.5,  2. ,  2.5,  3. ,  3.5,  4. ,  4.5,  5. ,
        5.5,  6. ,  6.5,  7. ,  7.5,  8. ,  8.5,  9. ,  9.5, 10. , 10.5,
       11. , 11.5, 12. , 12.5, 13. , 13.5, 14. , 14.5, 15. ])
data = np.sin(x) + np.random.rand(10,31) + np.random.randn(10, 1)
data
array([[ 0.6726167 ,  1.42526277,  1.72616519,  2.32083315,  1.54461515,
         1.40149227,  0.87580901,  0.80441429, -0.07224181,  0.29857697,
        -0.48424123,  0.31981954,  0.99846686,  1.42437645,  1.31025412,
         1.40829701,  2.22555828,  2.22047545,  1.57821254,  0.68658331,
         0.6881278 ,  0.27267873, -0.14865056,  0.20390982,  0.35513849,
         0.98212391,  1.58695872,  1.37983576,  2.37803345,  2.3879375 ,
         1.79185478],
       .........
       [ 2.75843589,  3.02276048,  3.64803647,  3.2642171 ,  3.67946998,
         3.74785894,  3.17628364,  2.70551084,  1.66156679,  2.19246399,
         1.62189055,  1.60772731,  1.97773633,  2.89555072,  3.39132847,
         3.1445841 ,  3.75955263,  3.05460622,  2.76118641,  2.38280821,
         2.22139674,  2.04374881,  1.87766694,  1.96670548,  2.05080123,
         2.57914958,  3.18484661,  3.32652216,  4.02001749,  3.91133834,
         3.13133477]])
# 查看sns.tsplot时间序列分析图手册
help(sns.tsplot)
# sns.tsplot
sns.tsplot(data=data)

gammas = sns.load_dataset('gammas', data_home='D:\\python\\ml\\seaborn-data-master')
gammas.head()

# help(sns.tsplot)   查看具体参数含义
sns.tsplot(time='timepoint', value='BOLD signal',
          unit='subject', condition='ROI',data=gammas)

# sns.tsplot时间序列图:err_style不确定区间样式
#{ci_band, ci_bars, boot_traces, boot_kde, unit_traces, unit_points}
ax = sns.tsplot(data=data, err_style='ci_bars', color='g')

ax = sns.tsplot(data=data, err_style='boot_traces', n_boot=500)

ax = sns.tsplot(data=data, err_style='unit_traces')

# interpolate是否显示连线
ax = sns.tsplot(data=data, err_style='ci_bars', interpolate=False)

# 
ax = sns.tsplot(data=data, estimator=np.median)

 

 

posted on 2021-10-30 16:12  架构艺术  阅读(650)  评论(0编辑  收藏  举报