Photo by bady abbas on Unsplash
样式配置文件
Matlibplot 每次加载前都会载入运行时配置文件(rc, runtime configuration). 这个文件包含如何创建图形元素默认风格的信息。
所修改的参数值仅在当前 Python 会话中有效。若重启 Python 且不运行参数修改代码,则仍为参数仍为默认值。
默认风格信息可通过plt.rcParams
获得。这些参数是通过字典的方式存储的。
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams
plt.rcParams
下面尝试一下修改参数'font.size': 10.0
为'font.size': 18.0
.
'font.size': 10.0
用修改字典元素的方式修改参数font.size
plt.rcParams['font.size'] = 18
尝试绘图确认是否修改成功全局字体大小是否修改成功
代码语言:javascript复制x = np.arange(1,11)
y = x **2
plt.plot(x,y)
plt.title("Fontsize = 18")
Fontsize = 18
若需修改回默认样式,可使用matplotlib.rcdefaults
实现。
import matplotlib as mpl
mpl.rcdefaults()
x = np.arange(1,11)
y = x **2
plt.plot(x,y)
plt.title("Default Fontsize")
Default Fontsize
预设样式表
除了可以在 Matlibplot 中自定义样式以外,还可以使用 Matlibplot 内置样式快速绘图配置。
样式的修改依赖于 Matlibplot.pyplot 中的 style 模块实现的。内置样式以文本形式存储,文件后缀为.mplstyle
.
使用样式表的方法很简单,主要有两种使用方式:全局使用、局部使用。
全局使用
设置全局使用后,plt.style.use
后的绘图将全部设置为新样式。
import matlibplot.pyplot as plt
# 使用经典风格绘图
plt.style.use("classic")
...(绘图代码,均使用classic 风格绘图)
局部使用
局部使用可在with
方法中使用上下样式管理器(context manager)实现在方法体内部临时切换样式表。
import matlibplot.pyplot as plt
with plt.style.context("classic")
...(绘图代码,使用classic 风格绘图)
...(绘图代码,使用default 风格绘图)
内置样式表
Matlibplot 配置了 12 种默认样式表。
- 默认风格(default)
- 经典风格(classic)
- Solarize_Light2
- _classic_test_patch
- bmh
本样式集来自Bayesian Methods for Hackers[1] 一书。对科学绘图而言,本样式是一个良好的解决方案。
- dark_background
- fast
- fivethirtyeight
本样式集模仿了著名数据记者 Nate Silver 创办网站Fivethirtyeight[2]的外观。
- ggplot
本样式集来自于 R 语言的同名绘图系统 ggplot2. 该样式集它在呈现数据方面吸取了很多最新的解决方案,并注重数据可视化的简单性。
- grayscale
- seaborn 系列
本样式表系列来自 Seaborn 包中的一组样式集[3]。Seaborn 包为 Matlibplot 提供更多附加功能并改善默认的 matplotlib 绘图样式。
<<< 左右滑动见更多 >>>
<<< 左右滑动见更多 >>>
- tableau-colorblind10
Tableau[4] 是一款著名可视化探索分析数据的软件。本样式表模仿 Tableau 的风格,可呈现出类似的视觉效果。
Tableau Logo
XKCD 手绘样式
XKCD[5] 是一个关于浪漫、隐喻、数字、以及语言的漫画网站。xkcd 是兰道尔·门罗(Randall Munroe)的网名,又是他所创作的漫画的名称,其漫画创作的手绘风格尤其引人注目。
Immune Factory(https://xkcd.com/2491/,CC-BY-NC 2.5)
matlibplot 提供了方法plt.xkcd[6]以便将默认风格转换为 XKCD 样式。
下面给出几个局部使用 XKCD 样式的例子。
下述绘图均在 Windows 系统下绘制,linux 系统可能需要自行修改参数rcParams
以便获得最佳的字体呈现效果。
Windows 系统一般情况下无需以下操作。若无法获得理想的效果,可通过修改参数rcParams
实现自定义全局字体
import matplotlib as mpl
import matplotlib.font_manager as fm
fe = fm.FontEntry(
fname='..\xkcd.ttf',
name='xkcd')
fm.fontManager.ttflist.insert(0, fe)
mpl.rcParams['font.family'] = fe.name
所需字体xkcd.ttf
可通过在后台回复xarray
获得。参数fname='..\xkcd.ttf'
需提供字体所在的路径。
首先导入数据
代码语言:javascript复制import xarray as xr
import matplotlib.pyplot as plt
import numpy as np
ds1 = xr.open_dataset("..\air.2020.nc", drop_variables = ["time_bnds"]).sel(level = 850).rename({"air": "Tair"})
ds = ds1.sortby("lat", ascending= True)
uwnd_raw = xr.open_dataset("..\uwnd.2020.nc", drop_variables = ["time_bnds"]).sel(level = 850, lon = slice(0, 160), lat=slice(85, 12)).uwnd.isel(time = 5)
vwnd_raw = xr.open_dataset("..\vwnd.2020.nc", drop_variables = ["time_bnds"]).sel(level = 850, lon = slice(0, 160), lat=slice(85, 12)).vwnd.isel(time = 5)
uwnd = uwnd_raw.sortby("lat", ascending= True)
vwnd = vwnd_raw.sortby("lat", ascending= True)
winddata_dense_raw = xr.Dataset(data_vars={"uwnd": uwnd, "vwnd": vwnd})
winddata_dense = winddata_dense_raw.assign(windspeed = np.hypot(winddata_dense_raw.uwnd, winddata_dense_raw.vwnd))
winddata_thin = winddata_dense.thin(lat=2, lon=2)
绘制 Matlibplot 默认绘图
代码语言:javascript复制ds.Tair.mean(dim = ('lat', 'lon')).plot(figsize=(12,5))
使用关键词with
以便局部使用 XKCD 样式
with plt.xkcd():
ds.Tair.plot(figsize=(12,5))
绘制一维线图
代码语言:javascript复制with plt.xkcd():
ds.Tair.mean(dim = ('lat', 'lon')).plot(figsize=(12,5))
绘制二维 pcolormesh
代码语言:javascript复制with plt.xkcd():
ds.Tair.mean(dim = ('time')).plot(figsize=(12,5))
绘制箭头风场(quiver
)图
with plt.xkcd():
fig, ax = plt.subplots(figsize=(12,5))
winddata_thin.plot.quiver(x="lon", y="lat", u="uwnd", v="vwnd", ax=ax)
绘制流场图
代码语言:javascript复制with plt.xkcd():
fig, ax = plt.subplots(figsize=(12,8))
winddata_thin.plot.streamplot(x="lon", y="lat", u="uwnd", v="vwnd", hue="windspeed",
ax=ax,
cbar_kwargs = {
"orientation": "horizontal",
"aspect": 40,
"pad": 0.15,
"label": "Wind Speed [m/s]",
},
linewidth = 1.5,
cmap = "plasma",
)
参考资料
[1]
Bayesian Methods for Hackers: http://camdavidsonpilon.github.io/Probabilistic-Programming-and-Bayesian-Methods-for-Hackers/
[2]
Fivethirtyeight: https://fivethirtyeight.com/
[3]
样式集: http://seaborn.pydata.org/tutorial/aesthetics.html
[4]
Tableau: https://www.tableau.com/
[5]
XKCD: https://xkcd.com/
[6]
plt.xkcd: https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.xkcd.html
# TIPS #
Xarray专题资料下载可在公众号前台回复xarray 获取。