文章目录

  • 预设
  • 修改 Matplotlib 画图 style
  • Seaborn 常用绘图
    • 柱状图
    • 计数图
    • 密度图(hist kde)
    • 散点图
    • 箱型图
    • 散点图矩阵
    • 小提琴图
    • 混合绘图
    • 回归图
  • 案例

seaborn 是 matplotlib 一个高级接口,它的底层是用 matplotlib 实现的。区别于后者,它致力于打造现代画图方式,而非经典的 Matlab 格式。

seaborn 可以直接画图,或者可以用来修改 matplotlib 的画图 style

预设

要想画出来的图有些逼格,首先应该进行如下设置

sns.set(style='ticks',rc={'font.sans-serif':'SimHei','axes.unicode_minus':False})   #用来显示中文

修改 Matplotlib 画图 style

import matplotlib.pyplot as plt
import numpy as np
import seaborn as snsplt.rcParams['font.sans-serif']=['SimHei']    #画图时显示中文字体
plt.rcParams['axes.unicode_minus'] = False     #防止因修改成中文字符,导致某些 unicode 字符不能显示
plt.subplots_adjust(left=None, bottom=None, right=None, top=None,wspace=0.3)    #设置制子图之间的左右间距,left 等是设置画图区域与画布之间的间font1 = {'family' : 'SimHei',
'weight' : 'normal',
'size'   : 15,
}   #设置图例(legend)文字的格式的def myplot(flip=2):x = np.linspace(0,20,50)for i in range(1,5):plt.plot(x,np.cos(x+i*0.8)*(9-2*i)*flip)myplot()


用 Matplotlib 画出的图如上,我们可以用 sns.set() 函数来修改画图风格。具体用法如下:sns.set(context='notebook',style='darkgrid',palette='deep',font='sans-serif',font_scale=1,color_codes=None,rc=None)
其中:
context:用于修改绘图的各种元素的格式,默认设置有 notebook、paper、talk、poster
style:darkgrid、whitegrid、dark、white、ticks
palette:调色板
font:字体格式
font_scale:字体大小
color_codes:修改颜色空间
rc:即 matplotlib 的rcParams,接收字典,比如:rc={‘line.linewidth’:2.5}
我们修改代码:

sns.set(context='poster',style='whitegrid',palette='deep',font_scale=1.5,color_codes=None)
myplot()

可得:

也可以用 sns.spine 来修改图中的坐标轴,比如sns.spine()可以移除图中顶部和右侧的轴线:

sns.set(context='notebook',style='white')
myplot()
sns.despine()


通过设置 despine 的参数,就能够修改其他轴线,比如 sns.despine(left=True) 可以将左边的轴线删除掉。sns.spine(offset=20) 可以设置轴线偏离画布的距离。

可以在同一副图中设置不同的绘图风格:

sns.set(context='notebook',style='ticks')
plt.subplot(2,1,1)
myplot()
sns.set(context='talk',style='darkgrid',font_scale=1)
plt.subplot(2,1,2)
myplot(-1)

除了用 sns.set() 来设置绘图风格之外,还可以用 sns.axes_style() 和 sns.plotting_context() 来分别设置绘图外观和绘图内容,分别对应 sns.set 的 style 和 context 参数,其取值也是一样的。

Seaborn 常用绘图

柱状图

可以用 sns.barplot(x,y) 来绘制,其中 x 一般是一个离散类别变量。

df = sns.load_dataset('iris')
sns.set(style='ticks')
sns.barplot(x=df['species'],y=df['petal_length'])


也可以用 sns.barplot(x,y,data) 来绘制。其中 data 是一个 dataframe 变量,x、y 接受 data 的列名,用于指定哪两列来绘图。

df = sns.load_dataset('iris')
sns.set(style='ticks')
sns.barplot(x='species',y='petal_length',data=df)

计数图

用法:sns.countplot(x) 或者 sns.countplot(x,data)。其中 x 为需要计数的变量,一般为类别型变量。x 也可以接受字符串,此时需要补一个 data 参数。data 参数接受一个 dataframe 变量,x 为 data 的某一个列名,用于指示哪一个 data 的列以绘制计数图。

sns.countplot(x='species',data=df)
或者
sns.countplot(x=df['species'])

可得:

并列计数图:sns.countplot(x,hue,data),其中 hue 应为一个类别变量的列名。

密度图(hist kde)

sns.distplot(x, bins = None, kde = True, hist = True, rug = False)
其中 bins 为画频率直方图的“x 轴格子数”,kde 为是否画出概率密度曲线,rug 为是否画出毛毯图;

dataset = datasets.load_iris(return_X_y = False)
X = pd.DataFrame(dataset['data'],columns=dataset.feature_names)
y = dataset['target']     # 导入数据格式sns.set()   #默认格式sns.distplot(X['petal width (cm)'],color='g')
plt.ylabel('Density')

结果如下:

from sklearn import datasetsdataset = datasets.load_iris(return_X_y = False)
X = pd.DataFrame(dataset['data'],columns=dataset.feature_names)
y = dataset['target']d = X['petal width (cm)']
d1 = X['petal length (cm)']sns.set(palette='muted')
fig = plt.figure(figsize=(8,8))
plt.subplot(2,2,1)
sns.distplot(d,color='g',bins=10,label='频数直方图',kde=False)
plt.legend(prop=font1)
plt.ylabel('Frequency')plt.subplot(2,2,2)
sns.distplot(d,color='b',hist=False,rug=True,label='毛毯图与密度图')
plt.legend(prop=font1)
plt.ylabel('Density')plt.subplot(2,2,3)
sns.distplot(d,color='m',hist=False,kde_kws={"shade":True},label='概率密度图')
plt.legend(prop=font1)
plt.ylabel('Density')plt.subplot(2,2,4)
sns.distplot(d,color='y')


sns.distplot(

散点图

可以用 sns.stripplot(x,y)
sns.stripplot(d1,d)
可得:

散点图的绘图函数也可以这样调用:sns.stripplot(x,y,data),其中 x,y 接受字符类型的变量,data 是 dataframe 的变量。x,y 为 dataframe 变量中的列名。

sns.set(context='paper')
sns.stripplot(x='sepal length (cm)',y='petal length (cm)',data=X)

箱型图

可以用 sns.boxplot(x,y)

from sklearn import datasetsdataset = datasets.load_iris(return_X_y = False)
X = pd.DataFrame(dataset['data'],columns=dataset.feature_names)
y = dataset['target']
d = X['petal width (cm)']
sns.boxplot(y,d)

可得

箱型图也可以用 sns.boxplot(x,y,data) 的方式绘图,其中 data 是 dataframe 变量,x,y接受 data 的列名。

散点图矩阵

可以用 sns.pairplot(data,vars=[]) 绘制。其中 data 接受一个 dataframe 数据,vars 接受一个字符串列表,每一个字符串都取自 dataframe 的列名。

df = sns.load_dataset('iris')
sns.set(style='ticks')
sns.despine()
sns.pairplot(df,vars=['sepal_length','sepal_width','petal_length'])

可得:

散点图矩阵中,对角线是频数直方图;其余是两两特征的散点图。

小提琴图

小提琴图是箱型图和概率密度图的结合,可以用 sns.violinplot(data) 来绘制,其中 data 是要展示的数据,是一个向量,可以是 array 或者 list 或者 series,代码如下:

df = sns.load_dataset('iris')
sns.set(style='ticks')
sns.violinplot(df['petal_length'])


也可以用 sns.violinplot(x,y,data) 来绘制多个小提琴。 其中 data 是一个 dataframe 变量, x,y 接受 data 变量的列名,用于指示需要绘制那一列。一般 x 指示的列是离散变量,即类别。

df = sns.load_dataset('iris')
sns.set(style='ticks')
sns.violinplot(df['species'],df['petal_length'])
或者:
sns.violinplot(x='species',y='petal_length',data=df)

混合绘图

用法为 sns.jointplot(x,y,kind='scatter') 或者 sns.jointplot(x,y,data,kind='scatter'),示例如下:

df = sns.load_dataset('iris')
sns.set(style='ticks')
sns.jointplot(df['petal_length'],df['petal_width'])


修改 kind = 'kde',从而用密度图代替频率分布图,等高线图代替散点图,如下:

sns.jointplot(x='petal_length',y='petal_width',data=df,kind='kde')

回归图

回归图可以揭示两个变量之间的线性关系,代码是 sns.regplot(x,y)sns.regplot(x,y,data)

df = sns.load_dataset('iris')
sns.set(style='ticks')
sns.regplot(x=df['petal_length'],y=df['petal_width'])
或者:
sns.regplot(x='petal_length',y='petal_width',data=df)

案例

df = sns.load_dataset('titanic')
display(df.head())
display(df.isnull().sum())mean = df['age'].mean()
print(mean)
df['age'] = df['age'].fillna(mean)
df['embarked'] = df['embarked'].fillna('S')
del df['deck']sns.set(context='paper',style='white',font_scale=1.25)
sns.despine()
sns.distplot(df['age'],bins=15)df['sex'].value_counts().plot(kind='bar',rot=30,fontsize=16)
plt.ylabel('数量',fontsize=16)
plt.xlabel('年龄',fontsize=16)
plt.show()
sns.countplot(x=df['sex'])sns.boxplot(x=df['sex'],y=df['age'])
sns.countplot(x='class',data=df)
sns.violinplot(df['class'],df['age'])sns.countplot(df['alive'],hue=df['class'])





Seaborn 画图相关推荐

  1. seaborn+画图+EDA

    seaborn+画图+EDA 本文介绍了一些用于查看categorical变量与其他变量(一般是label)之间关系的一些可视化技巧,其中主要涉及的包有: 查看categorical变量与一些其他变量 ...

  2. python seaborn 画图

    python seaborn 画图 59888745@qq.com 2017.08.02 distplot( )  kdeplot( ) distplot( )为hist加强版, kdeplot( ) ...

  3. seaborn画图设置横纵坐标标签

    用seaborn库来画图,也同样可以通过matplotlib.pyplot.xlabel设置x轴标签,而matplotlib.pyplot.ylabel设置当前轴的y轴标签 举个例子: import ...

  4. python使用matplotlib, seaborn画图时候的数据加载

    写在前面的话 当我们使用python来画图的时候,我觉得最难的部分应该是数据加载.因为尽管官网的教程给出了怎么画出某个图片的示例,但是数据往往是随机产生的,这些数据和我们需要的数据往往是不符的.这个时 ...

  5. Python_note9 Matplotlib画图 Seaborn画图

    数据处理到人工智能 数据表示 采用合适方式程序表达数据 数据清洗 数据归一化,数据转换,异常值处理 数据统计 数据概要理解,数量,分布,中位数 数据可视化 直观展示数据内涵 数据挖掘 从数据分析获得知 ...

  6. seaborn 画图工具的基本使用

    文章目录 1. Seaborn 的基本使用 1.1 Seaborn----绘制统计图形 1.1.1 绘制单变量分布 1.1.2. 绘制双变量分布 1 绘制散点图 2 绘制二维直方图 3 绘制核密度估计 ...

  7. seaborn 常用画图

    python seaborn画图 以前觉得用markdown写图文混排的文字应该很麻烦,后来发现CSDN的markdown真是好用的. 在做分析时候,有时需要画几个图看看数据分布情况,但总记不住pyt ...

  8. python画图包seaborn和matplotlib中文字体显示(针对windows系统,,使用ipython notebook)

    一.seaborn的中文字体显示(针对windows系统,,使用ipython notebook) #################### 更新:2017年6月16日 这次的seaborn版本是0. ...

  9. seaborn单变量/双变量/多变量绘图

    sns.regplot(x="属性1",y="属性2",data = dataframe) 首先导入库: import numpy as np import m ...

最新文章

  1. xml布局显示需要预判断,可是还没有show出来,怎么办?
  2. python控制语句中的条件语句_『Python』条件控制语句
  3. linux手动注入网络数据_Linux网络 - 数据包的接收过程
  4. Mozilla开发全新的公开网络API WebXR 来实现增强现实
  5. 关于substring的理解
  6. 设计模式 命令模式 实例_根据您的命令-命令设计模式
  7. java frame的使用方法_java内部窗体internalFrame的使用方法
  8. WinForm 对EXCEL 的操作(三)
  9. Angular环境配置及创建新的项目
  10. Debugview调试视图
  11. hadoop学习资源与路线图
  12. 深入解密比Guava Cache更优秀的缓存-Caffeine
  13. RabbitMq七种工作模式,结合简单的java实例使用,答应我不要再说你不会RabbitMq了,好吗,宝贝?
  14. between and 用法
  15. PS 超简单抠头发丝
  16. 编写代码的软件用什么编写的_编写出色的代码
  17. SpringCloud07_消息总线(Bus)
  18. 拼多多搜索怎么测图测款?教你快速找出店铺内潜在爆款
  19. 精华游戏算法整理_整理游戏
  20. python简单编程代码表白,Python简单编程游戏代码

热门文章

  1. android JS动态框架,jsBridge
  2. SPI接口的FPGA实现(三)——Verilog代码实现SPI接口
  3. 时间序列分析之ADF检验——Java实现
  4. 移动端遇到的问题(苹果ios、妹子ui)
  5. php抓取新浪微博数据抓取,php获取新浪微博数据API实例
  6. 用pageOffice文档控件实现 office文档在线编辑
  7. GPS坐标WGS84到东北天坐标系ENU
  8. 以太坊合并 你需知道的10个问题
  9. 控制网络技术(英文一)
  10. 怎么调整Word中编号和文字中间的空格距离?