【论文绘图】matplotlib,seaborn,proplot,SciencePlots入门知识

以下内容参考宁海涛老师的书《科研论文配图绘制指南——基于python》以及matplotlib官方文档、seaborn官方文档。

matplotlib

image.png
这些元素分别是用哪个接口控制的呢?

Artists

matplotlib共三层API,FigureCanvasRenderer 层负责处理底层细节,用户花95%的时间都是在Artists层。
Artists对象 有两种,基础对象和容器对象。 基础类元素包括常见的点(point)、 线(line)、文本(text)、网格(grid)、标题(title)、图例(legend)等;容器类元素则是指 一种或多种基础类元素的合集,主要包括图形、坐标图形、轴和刻度 。

figure

创建figure并在上面作图:

import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(2, 1, 1) # two rows, one column, first plot

add_subplot 在图表中添加axes

Axes

Axes 是绘图区域, 也称为子图 。大部分对象都会进入其中,Axes 有许多特殊的辅助方法(plot()、text()、hist()、imshow()),可以创建最常见的图形原型(分别为 Line2D、Text、Rectangle、AxesImage)。

使用辅助方法创建元素:

接上例:

import numpy as np
t = np.arange(0.0, 1.0, 0.01)
s = np.sin(2*np.pi*t)
line, = ax.plot(t, s, color='blue', lw=2)

这样就在ax子图上添加了line元素。这个元素保存在ax.lines列表中。

移除元素的方法:

如果想要移除一条line:

line = ax.lines[0]
line.remove()

控制xy轴的方法:

每个Axes实例包含一个 XAxis 和一个 YAxis 实例,用于处理刻度、刻度标签和轴标签的布局和绘制。
设置轴标签

xtext = ax.set_xlabel('my xdata')  # returns a Text instance
ytext = ax.set_ylabel('my ydata')


Axes类的其他方法可以查阅https://matplotlib.org/stable/api/axes_api.html

区别Axes和Axis

Axes是一个子图的一整套坐标轴,包括x轴,y轴,(z轴)。
Axis是一个子图的一个轴,是x轴,y轴,(z轴)

seaborn

Seaborn 基于 Matplotlib,Matplotlib 中大多数绘图函数的参数都可在 Seaborn 绘图函数中使用 。因此seaborn绘制的图也需要导入matplotlib并使用plt.show()来显示。

初始化

设置主题并导入DataFrame格式的数据集。我们在使用seaborn时用pd.read_csv()导入数据就可以了。

import seaborn as sns
sns.set_theme()

tips = sns.load_dataset('tips')
print(type(tips))  # <class 'pandas.core.frame.DataFrame'>
     total_bill   tip     sex smoker   day    time  size
0         16.99  1.01  Female     No   Sun  Dinner     2
1         10.34  1.66    Male     No   Sun  Dinner     3
2         21.01  3.50    Male     No   Sun  Dinner     3
3         23.68  3.31    Male     No   Sun  Dinner     2
4         24.59  3.61  Female     No   Sun  Dinner     4
..          ...   ...     ...    ...   ...     ...   ...
239       29.03  5.92    Male     No   Sat  Dinner     3
240       27.18  2.00  Female    Yes   Sat  Dinner     2
241       22.67  2.00    Male    Yes   Sat  Dinner     2
242       17.82  1.75    Male     No   Sat  Dinner     2
243       18.78  3.00  Female     No  Thur  Dinner     2

[244 rows x 7 columns]

Seaborn 在创建之初就将可绘制的图进行了分类 , 者可根据数据类型选择绘制相应的图, 从而实现高效绘图。

关系型图

image.png
使用举例:
relplot() 用点线可视化变量之间的统计关系。它默认是scatterplot()。当数据不是数值型数据时,会有其他画点图的方法。

sns.relplot(data=tips, x="total_bill", y="tip")

image.png

现在数据是两维的。用hue加一个维度,让点的颜色变得有意义:

sns.relplot(data=tips, x="total_bill", y="tip", hue="smoker")

image.png
为了进一步强调smoker这个维度的区别,可以用style参数强调。加上style参数的意思是在style参数指定的维度上使用强调手段,但是具体用什么手段强调不是我们要关心的问题(这是seaborn的好处,让我们专注于数据而不去纠结用三角还是圆形还是叉叉)

sns.relplot(data=tips, x="total_bill", y="tip", hue='smoker', style='smoker')

image.png
谨慎使用style参数,人眼对形状不如对颜色敏感。
如果hue接收连续型变量,就会使用一个连续调色板:

sns.relplot(data=tips, x="total_bill", y="tip", hue='tip')

image.png
当然也可以跟一个palette参数定制调色板:

sns.relplot(
    data=tips,
    x="total_bill", y="tip",
    hue="size", palette="ch:r=-.5,l=.75"
)

size参数调整散点大小:

sns.relplot(data=tips, x="total_bill", y="tip", size="size")

size参数会根据参数范围自适应的调整点大小,而不按照参数的绝对值。
也可以定制大小:

sns.relplot(
    data=tips, x="total_bill", y="tip",
    size="size", sizes=(15, 200)
)

以上是relplot的散点模式。会发现所有主要参数都是使用列名。

数据分布型图

image.png

分类数据型

image.png
image.png

回归模型分析型

image.png

绘制子图

FacetGrid()

PairGrid()

ProPlot

proplot通过fig = figure()函数来创建一个画布,通过axs = fig.subplots()来创建子图。接下来讲解figure函数用来控制子图的两个参数:
figure(span, share)

轴共享share

可以给sharex sharey share 传入以下几种共享方式:
● False 或 0:禁用轴共享。
● labels"、"labs “或 1:共享轴标签,但不共享其他内容。标签将显示在最左侧和最下方的子图上。
● limits”、"lims "或 2:与 1 相同,但也共享轴限制、轴刻度、主刻度线和次刻度线位置及格式。
● True 或 3(默认): 与 2 相同,但也共享轴刻度线标签。刻度标签将显示在最左侧和最下方的子图上。
● 全部 "或 4:与 3 相同,但轴限制、轴刻度和轴刻度即使在不在同一行或列的子图间也会共享。

跨度span,spanx, spany

● span=True: 当多个子图的标签相同时,使用一个轴标签
● span=False: 当多个子图的标签相同时,不使用一个轴标签

子图编号fig.format(abcloc), axes.format(abcloc)

format函数用于 绘制不同的子图序号样式和位置 。
abcloc参数用于指定位置。

SciencePlots

SciencePlots可以方便地绘制符合期刊要求的配图。

安装

pip install SciencePlots
安装MikTex和 Ghostscript ,并将它们添加到环境变量中,具体为 “…\miktex\bin\x64”和“…\gs__( 版本号 )\bin”。一般情况下,在添加完系统环境变量后,重 启机器,相关配置即可生效 。

使用

导包并设置全局style。

import matplotlib.pyplot as plt
import scienceplots

plt.style.use('science')

也可以设置多style, 例如以下的示例中,'ieee’会覆盖一些science的参数,适用于IEEE期刊。

plt.style.use(['science','ieee'])

所有可用的style:https://github.com/garrettj403/SciencePlots/wiki/Gallery
设置完了主题正常画图就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

__心似大海__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值