【Datawhale 科研绘图】 2.3 ProPlot打卡
ProPlot安装 ,参考了很多资料最后总结如下
pip install matplotlib==3.4.3
pip install SciencePlots
pip install ProPlot
下载超时解决办法:更换为国内源
pip --default-timeout=100 install SciencePlots[可替换为其他] -i https://pypi.douban.com/simple
ProPlot介绍
ProPlot 库[5]是 Matplotlib 面向对象绘图方法(object-oriented interface)的高级封装,
整合了 cartopy/Basemap 地图库、xarray 和 pandas,可弥补 Matplotlib 的部分缺陷。
2.3.1 多子图绘制处理
- 共享轴标签
```python
import pandas as pd
import numpy as np
import proplot as pplt
import matplotlib.pyplot as plt
#导入警告包
import warnings
warnings.filterwarnings("ignore")
#数据部分
N = 50
M = 40
state = np.random.RandomState(51423)
cycle = pplt.Cycle('grays', M, left=0.1, right=0.8)
datas = []
for scale in (1, 3, 7, 0.2):
data = scale * (state.rand(N, M) - 0.5).cumsum(axis=0)[N // 2:, :]
datas.append(data)
```c
# 绘图部分
# Plots with different sharing and spanning settings
# Note that span=True and share=True are the defaults
spans = (False, False, False, False)
shares = (False, 'labels', 'limits', True)
for i, (span, share) in enumerate(zip(spans, shares)):
fig = pplt.figure(refaspect=1, refwidth=1.06, spanx=span, sharey=share)
axs = fig.subplots(ncols=3)
for ax, data in zip(axs, datas):
on = ('off', 'on')[int(span)]
ax.plot(data, cycle=cycle)
ax.format(
grid=False, xlabel='X labels', ylabel='shared axis',
#suptitle=f'Sharing mode {share!r} (level {i}) with spanning labels {on}'
)
plt.show()



2.3.2 ProPlot 库中专门用于绘制【单个子图或多个连续子图】的颜色条和图例的简单框架
该框架将位置参数传递给 ProPlot 的 axes.Axes.colorbar 或 axes.Axes.legend,完成特定子图不同位置颜色条或图例的绘制。
想要沿图形边缘绘制颜色条或图例,使用 proplot.figure.Figure.colorbar 和 proplot.figure.Figure.legend 即可。
图 2-3-4 为 ProPlot 的 Axes对象的颜色条和图例的绘制效果图
图 2-3-5 为 Figure 对象的 颜色条和图例的绘制效果图
import pandas as pd
import numpy as np
import proplot as pplt
import matplotlib.pyplot as plt
fig = pplt.figure(share=False, refwidth=2.3)
# Colorbars 颜色条
ax = fig.subplot(121)
state = np.random.RandomState(51423)
m = ax.heatmap(state.rand(10, 10), colorbar='t', cmap='marine')
# cmap='grays'/marine 颜色类型选择
ax.colorbar(m, loc='r')
ax.colorbar(m, loc='ll', label='colorbar label')
ax.format(title='Axes colorbars')
#-----------------------------------------------------------------
# Legends 图例
ax = fig.subplot(122)
ax.format(title='Axes legends', titlepad='0em')
hs = ax.plot(
(state.rand(10, 5) - 0.5).cumsum(axis=0), linewidth=3,
cycle='ggplot', legend='t',
labels=list('abcde'), legend_kw={'ncols': 5, 'frame': False}
)
ax.legend(hs, loc='r', ncols=1, frame=False)
ax.legend(hs, loc='ll', label='legend label')
fig.format(abc="(a)", abcloc="ul",abcsize=15,
xlabel='xlabel', ylabel='ylabel')
plt.show()
颜色条
图例
2.3.3 更加美观的颜色和字体
科学可视化展示中的一个常见问题是使用像“jet”这样的存在误导的颜色映射(colormap)
去映射对应数值,这种颜色映射在色相、饱和度和亮度上都存在明显的视觉缺陷
ProPlot 库封装了大量的颜色映射选项,不但提供了来自 Seaborn、cmOcean、
SciVisColor 等拓展包和 Scientific colour maps 等项目中的多个颜色映射选项,而且定义了一些
默认颜色选项和一个用于生成新颜色条的 PerceptualColormap 类。
Matplotlib 的默认绘图字体为 DejaVu Sans,这种字体是开源的,但是,从美学角度来说,
它并不太讨人喜欢。
ProPlot 库还附带了其他几种无衬线字体和整个 TeX Gyre 字体系列,这些字体 更加符合一些科技期刊对科研论文配图的绘制要求。图
2-3-6 为使用 ProPlot 的不同颜色映射选 项绘制的不同颜色映射的效果图。
其中,图 2-3-6(a)为灰色(grays)系颜色映射,
图 2-3-6(b)为 Matplotlib 默认的 viridis 颜色映射,
图 2-3-6(c)为 Seaborn 中的 mako 颜色映射,
图 2-3-6(d)为 ProPlot 中的 marine 颜色映射,
图 2-3-6(e)为 cmOcean 中的 dense 颜色映射,
图 2-3-6(f)为 Scientific colour maps 中的 batlow 颜色映射。更多颜色映射的绘制请参考 ProPlot 官方教程。

本文介绍了ProPlot库在数据可视化中的应用,包括多子图的绘制处理,如何方便地添加颜色条和图例,以及提供更美观的颜色映射和字体选择。ProPlot是Matplotlib的高级封装,支持与cartopy、xarray和pandas的整合,能弥补Matplotlib的不足。文章展示了ProPlot在颜色条和图例定位、科学颜色映射选择等方面的改进,提升了科研图表的视觉效果。
766





