目录
ProPlot
ProPlot是基于Matplotlib构建的,因此它仍然保留了Matplotlib的许多功能和灵活性。如果你已经熟悉Matplotlib,并且对其功能满意,那么ProPlot可能不是必需的。然而,如果你想要更简洁、更美观的图形,以及更好的交互性和额外的图形类型,那么ProPlot可能是一个不错的选择。
安装
pip install proplot
基础实现
基本绘图功能与Matplotlib语法一致,照葫芦画瓢即可。
# Single subplot
import numpy as np
import proplot as pplt
state = np.random.RandomState(123) # 设置随机种子
data = 2 * (state.rand(10, 5) - 0.5) # 生成数据
fig = pplt.figure(suptitle='Single subplot')
ax = fig.subplot(xlabel='x axis', ylabel='y axis')
ax.plot(data, lw=2)# 设置线宽lw = 2
创建子图
与 matplotlib 类似,子图可以逐一或一次性添加到图形中。每个子图都是proplot.axes.Axes的一个实例。要一次添加所有子图,请使用 proplot.figure.Figure.add_subplots。
import numpy as np
import proplot as pplt
state = np.random.RandomState(123)
data = 2 * (state.rand(10, 5) - 0.5)
fig = pplt.figure()
ax = fig.subplot(121)
ax.plot(data, lw=2)
ax = fig.subplot(122)
fig.format(
suptitle='Subplot grid', title='Title',
xlabel='X Axis', ylabel='Y Axis'
)
fig.save('example1.pdf')
Matplotlib有 两个不同的接口:面向对象的接口和 MATLAB 风格的pyplot接口(内部使用面向对象的接口)。使用 proplot 进行绘图就像使用 matplotlib 的面向对象界面进行绘图一样。添加的绘图功能是通过中间子类实现的proplot.axes.PlotAxes,同时也可以通过调整style,获取不同的绘图风格。
import proplot as pplt
import numpy as np
state = np.random.RandomState(123)
data = state.rand(10, 5)
fig, axs = pplt.subplots(ncols=2, nrows=2, span=True, share=True )
axs.format(suptitle='Style demo')
styles = ('ggplot', 'seaborn', 'fast', 'bmh')
for ax, style in zip(axs, styles):
ax.format(style=style, xlabel='xlabel', ylabel='ylabel', title=style)
ax.plot(data, linewidth=3)
色带与图例
在 proplot 中,可以使用方法 proplot.figure.Figure.colorbar 和proplot.figure.Figure.legend 在图形边缘添加色条和图例。这些方法可将色条和图例对齐到子绘图网格边缘而非图形边缘。与坐标轴色条和图例一样,如果在同一侧绘制多个色条或图例,它们会相互堆叠。要在子绘图网格的特定行或列旁绘制色条或图例,可以使用 row、rows等关键字参数。
import proplot as pplt
import numpy as np
state = np.random.RandomState(123)
# 构建figure与axes对象
fig, axs = pplt.subplots(ncols=3, nrows=3, refwidth=1.4) # 网格为九宫格
# 绘制每一个ax子图
for ax in axs:
m = ax.pcolormesh(
state.rand(20, 20), cmap='blues',
levels=np.linspace(0, 1, 11), extend='both'
)
fig.format(
suptitle='Figure colorbars and legends demo',
abc='a.', abcloc='l', xlabel='xlabel', ylabel='ylabel' # ablloc 指的是序号abc的location
)
# 绘制图例,也就是每一个色带
fig.colorbar(m, label='column 1', ticks=0.5, loc='b', col=1) # ticks表示刻度;loc表示location(位置),用于描述label
fig.colorbar(m, label='columns 2 and 3', ticks=0.2, loc='b', cols=(2, 3))
fig.colorbar(m, label='stacked colorbar', ticks=0.1, loc='b', minorticks=0.05)
fig.colorbar(m, label='colorbar with length <1', ticks=0.1, loc='r', length=0.7)
SciencePlots
SciencePlots是一个用于创建具有学术出版风格的科学图表的Python软件包。它提供了一系列预定义的图表样式,可以帮助用户快速生成符合学术出版要求的高质量图表。其主要作用是提供了多个预定义的图表样式,包括Science、Nature、IEEE等,以及一些特定期刊的样式。这些样式遵循学术出版的规范,使得生成的图表具有专业、一致的外观。
安装
# to install the lastest release (from PyPI)
pip install SciencePlots
# to install the latest commit (from GitHub)
pip install git+https://github.com/garrettj403/SciencePlots
基础实现
由于SciencePlots的绘图需要使用LaTeX语言,安装事宜可参考相关文档,接下来主要进行线图、散点图与柱状图的绘制。
线图
import numpy as np
import matplotlib.pyplot as plt
import scienceplots as sp
# 使用SciencePlots样式
plt.style.use('ieee')
# 创建数据
x = np.linspace(0, 2*np.pi, 100)
y = np.sin(x)
# 绘制线图
plt.plot(x, y)
plt.xlabel('X')
plt.ylabel('Y')
plt.title('Sine Wave')
plt.grid(True)
plt.show()
散点图
import numpy as np
import matplotlib.pyplot as plt
import scienceplots as sp
# 使用SciencePlots样式
plt.style.use('science')
# 创建数据
x = np.random.rand(100)
y = np.random.rand(100)
colors = np.random.rand(100)
sizes = 100 * np.random.rand(100)
# 绘制散点图
plt.scatter(x, y, c=colors, s=sizes, alpha=0.7)
plt.xlabel('X')
plt.ylabel('Y')
plt.title('Scatter Plot')
plt.colorbar()
plt.show()
柱状图
import numpy as np
import matplotlib.pyplot as plt
import scienceplots as sp
# 使用SciencePlots样式
plt.style.use('nature')
# 创建数据
categories = ['A', 'B', 'C', 'D', 'E']
values = [15, 24, 12, 8, 10]
# 绘制柱状图
plt.bar(categories, values)
plt.xlabel('Categories')
plt.ylabel('Values')
plt.title('Bar Plot')
plt.show()
总结
本次基于ProPlot与SciencePlots进一步了解了Python绘图技巧,相比之下ProPlot具有更强的数据可视化能力,而SciencePlots则更加注重于科学期刊制图格式的规格(如字体,线宽等等),灵活性较差,所以我们需要根据不同的情形选择对应的第三方库进行绘图,具体问题具体分析。