绘图工具Matplotlib&seaborn
Matplotlib
1 | import matplotlib.pyplot as plt |
绘制流程
创建画布
plt.figure()
1
2
3
4plt.figure(figsize=(), dpi=)
# figsize:指定图的长宽
# dpi:图像的清晰度
# 返回fig对象绘制图形
1
2# 以折线图为例子
plt.plot(x,y)显示图像
折线图——1
2
3
4
5
6
7import matplotlib.pyplot as plt
# 1.创建画布
plt.figure(figsize=(10, 10), dpi=100)
# 2.绘制折线图
plt.plot([1, 2, 3, 4, 5, 6 ,7], [17,17,18,15,11,11,13])
# 3.显示图像
plt.show()
具体介绍
plt.figure()
1 | plt.figure(num=3, figsize=(8, 5)) |
plt.plot
1
2
3
4
5
6
7plt.plot(x, y, color="red", linewidth=1, linestyle="--")
'''
color: 指定画图的颜色,如“red”为红色。
linewidth: 指定线的粗细。
linestyle: 指定画出的样式,如“-”为实线, “--”为虚线。
'''
其它设置
- 设置坐标名字
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16#设置坐标轴的名字
plt.xlabel("X") #设置横向坐标轴的名字为X
plt.ylable("Y") #设置纵向坐标轴的名字为Y
#设置坐标轴的范围
plt.xlim((-1,1)) #设置横向坐标轴的范围为-1到1
plt.ylim((-1,8))
#设置坐标轴的间隔
new_xticks = np.linspace(-2,2,5) #产生一个-2到2之间均匀分布的5个数字作为一维数据
plt.xticks(new_xticks) #将产生的一维数组作为横向坐标轴的坐标值
#将坐标轴的刻度改变为其它标识
plt.yticks([1, 3, 5], ["$bad$", "OK", "good"])
- 设置坐标轴的位置
1 | ax = plt.gca()#意为 get current axis,得到当前的坐标轴信息 |
Seaborn
seaborn 总结(CSDN)import seaborn as sns
当处理一组数据时,通常先要做的就是了解变量是如何分布的。
- 对于单变量的数据来说 采用直方图或核密度曲线是个不错的选择
- 对于双变量来说,可采用多面板图形展现,比如 散点图、二维直方图、核密度估计图形等。
变量分布
单变量
1 | seaborn.distplot(a, bins=None, hist=True, kde=True, rug=False, fit=None, color=None) |
图中蓝色实线即是核密度线。
只画核密度可以——sns.distplot(array_random, hist=False, rug=True)
双变量
多变量分布图采用的函数是jointplot
。
1 | tips = sns.load_dataset("tips") |
通过设置kind='reg'
可以设置回归绘图和核密度曲线。
对于数据过于集中的,可以转为六边形kind=hex
1 | sns.jointplot(x="Height",y="Weight",data=china_athletes,kind="hex",gridsize=20) |
通过设置kind='kde'
可以设置用等高线图来表示核密度曲线。
成对绘图
pairplot
可以把某个数据集中某几个字段之间的关系图一次性绘制出来。比如iris
鸢尾花数据,我们想要看到petal_width
、petal_height
、sepal_width
以及sepal_height
之间的关系,那么我们就可以通过pairplot
来绘制。
1 | sns.pairplot(iris,vars=['sepal_length',"sepal_width",'petal_length','petal_width']) |
默认情况下,对角线的图(x和y轴的列相同)是直方图,其他地方的图是散点图,如果想要修改这两种图,可以通过
diag_kind
和kind
来实现。
参数可取的值为:
diag_kind
:auto
,hist
,kde
。kind
:scatter
,reg
。
示例代码如下:
1 | sns.pairplot(iris,vars=['sepal_length',"sepal_width",'petal_length','petal_width'],diag_kind="kde",kind="reg") |
关系绘图
relplot
可以用来表示多个变量之间的关联关系。默认情况下是绘制散点图,也可以绘制线性图。
kind参数
具体绘制什么图形是通过kind
参数来决定的。
实际上以下两个函数就是
relplot
的特例:
scatterplot
:relplot(kind='scatter')
。lineplot
:relplot(kind='line')
。
基础绘制
1 | import seaborn as sns |
折线图
示例代码如下:
1 | fmri = sns.load_dataset("fmri") |
效果图如下:
hue参数
hue
参数是用来控制第三个变量的颜色显示的
以上图的基础之上体现出星期几的参数,那么可以通过以下代码来实现:
1 | sns.relplot(x="total_bill",y="tip",hue="day",data=tips) |
效果图如下:
col和row参数
把Lunch(午餐)
和Dinner(晚餐)
分割,把性别按照行显示出来,代码如下:
1 | sns.relplot(x="total_bill",y="tip",hue="day",col="time",row="sex",data=tips) |
效果图如下:
col_wrap参数
通过col_wrap
来指定具体多少列。示例代码如下:
1 | sns.relplot(x="total_bill",y="tip",col="day",col_wrap=2,data=tips) |
效果图如下:
分类绘图
sns.catplot
分类散点图
stripplot()
:catplot(kind="strip")
,默认的。swarmplot()
:catplot(kind="swarm")
。
stripplot——
1 | sns.catplot(x="day",y="total_bill",data=tips,hue="sex") |
swarmplot——
相比第一个更加散开(不过于集中),但是不能设置size和style
1 | sns.catplot(x="day",y="total_bill",kind="swarm",data=tips,hue="sex") |
如需要绘制横线的图,将xy调换位置即可。
分类分布图
根据分类来看,然后在每个分类下数据的分布情况
箱线图
1 | athletes = pd.read_csv("athlete_events.csv") |
小提琴图
小提琴实际上就是两个对称的核密度曲线合并起来,然后中间是一个箱线图(也可以为其他图)组成的
1 | sns.catplot(x="day",y="total_bill",data=tips,kind="violin",hue="sex",split=True) |
效果图如下:inner
参数:提琴的中间默认绘制的是箱线图,也可以修改为其他类型的。
根据分类,统计每个分类下的数据的个数或者比例
barplot()
:catplot(kind="bar")
。pointplot()
:catplot(kind="point")
。countplot()
:catplot(kind="count")
。
条形图:
kind="bar"
seaborn
中的条形图具有统计功能,可以统计出比例,平均数
统计平均数:
1 | # 统计星期三到星期天的消费总额的平均数 |
统计比例:
1 | # 统计男女中获救的比例 |
自定义统计函数:(案例统计总和)
当然你也可以用柱状图
1 | # 自定义统计函数,统计出每个性别下获救的人数 |
柱状图
醉了,上面那个叫条形图
统计某个单一变量出现数量的图形
使用kind="count"
使用hue
参数来指定分组:
1 | sns.catplot(x="day",kind="count",data=tips,hue="sex") |
点线图:
kind="point"
点线图可以非常方便的看到变量之间的趋势变化。
1 | sns.catplot(x="sex",y="survived",data=titanic,kind="point",hue="class") |
效果图如下:
FacetGrid
创建一个FacetGrid
对象,然后再调用这个对象的map
方法。其中map
方法的第一个参数是一个函数,后续map
将调用这个函数来绘制图形。后面的参数就是传给这个函数的参数。
示例代码如下:
1 | tips = sns.load_dataset("tips") |
其中第一个参数是可以绘制Axes
图,并且可以接收color
参数的函数。可以取的值如下:
参数 | 描述 | 对应使用了FacetGrid 函数 |
---|---|---|
plt.plot /sns.lineplot |
绘制折线图 | sns.relplot(kind="line") |
plt.hexbin |
绘制六边形图形 | sns.jointplot(kind="hex") |
plt.hist |
绘制直方图 | sns.distplot |
plt.scatter /sns.scatterplot |
绘制散点图 | sns.relplot(kind="scatter") |
sns.stripplot |
绘制分类散点图 | sns.catplot(kind="strip") |
sns.swarmplot |
绘制散开来的分类散点图 | sns.catplot(kind="swarm") |
sns.boxplot |
绘制箱线图 | sns.catplot(kind="box") |
sns.violinplot |
绘制小提琴图 | sns.catplot(kind="violin") |
sns.pointplot |
绘制点线图 | sns.catplot(kind="point") |
sns.barplot |
绘制条形图 | sns.catplot(kind="bar") |
sns.countplot |
绘制数量柱状图 | sns.catplot(kind="count") |
sns.regplot |
绘制带有回归线的散点图 | sns.lmplot |
其他设置
基础
大同小异
- 换行
示例代码如下:
1 | g = sns.FacetGrid(tips,col="day",col_wrap=2) |
效果图如下:
- 多个颜色观察字段
hue
- 设置尺寸
在FacetGrid
中设置height
和aspect
来实现
其中height
表示的是每个图形的尺寸(默认是宽高一致)
aspect
表示的是宽度/高度
的比例。
1 | g = sns.FacetGrid(tips,col="day",row="time",height=10,aspect=2) |
进阶
- 图例
1 | # 直接添加 |
标题
设置标题可以通过g.set_titles(template=None,row_template=None,col_template=None)
来实现,这三个参数意义如下:
template
:给图设置标题,其中有{row_var}:绘制每行图像的名称
,{row_name}:绘制每行图像的值
,{col_var}:绘制每列图像的名称
,{col_name}:绘制每列图像的值
这几个参数可以使用。col_template
:给图像设置列的标题。其中有{col_var}
以及{col_name}
可以使用。row_template
:给图像设置行的标题。其中有{row_var}
以及{row_name}
可以使用。
示例代码如下:
1 | g = sns.FacetGrid(tips,col="day",row="time") |
设置坐标轴:
g.set_axis_labels(x_var,y_var)
:一次性设置x
和y
的坐标的标题。g.set_xlabels(label)
:设置x
轴的标题。g.set_ylabels(label)
:设置y
轴的标题。g.set(xticks,yticks)
:设置x
和y
轴的刻度。g.set_xticklabels(labels)
:设置x
轴的刻度文字。g.set_yticklabels(labels)
:设置y
轴的刻度文字。
示例代码如下:
1 | g.set(xticks=range(0,60,10),xticklabels=['$0','$10','$20','$30','$40','$50']) |
效果图如下:
风格
1 | sns.set_style("white") # 背景纯白 |
风格设置函数
sns.axes_style
如果不传递任何参数,那么将会返回可以设置的所有属性
临时的设置
1 | {'axes.facecolor': 'white', |
sns.set_style()
一旦设置了,那么下面的所有绘图都是用这个风格。
sns.set
除了style
以外,还可以设置调色板,字体,字体大小,颜色等,也可以设置其他的matplotlib.rcParams
可以接收的参数。
sns.set(context='notebook', style='darkgrid', palette='deep', font='sans-serif', font_scale=1, color_codes=True, rc=None)
调色盘设置
定性调色盘
一般在数据不连续,比较离散
默认
1 | current_palette = sns.color_palette() |
hls圆形颜色系统
1 | # 使用hls圆形颜色系统,取20个颜色 |
连续的颜色盘
使用同一个色系
1 | sns.palplot(sns.color_palette("Blues")) |
离散的色盘
中间浅色 两边深色(或者反)
1 | values = [12,15,17,18,-5,-10]with sns.color_palette("RdBu_r"): sns.barplot([1,2,3,4,5,6],sorted(values)) |