Python绘图简要---基于ProPlot与SciencePlots

文章介绍了ProPlot和SciencePlots这两个Python库在数据可视化的不同特点,ProPlot提供更简洁美观的图形和交互性,适合对Matplotlib有一定了解的需求者;而SciencePlots专注于科学期刊风格图表,适用于学术出版。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

ProPlot

安装

基础实现

创建子图

色带与图例

SciencePlots

安装

基础实现

线图

散点图

柱状图

总结


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则更加注重于科学期刊制图格式的规格(如字体,线宽等等),灵活性较差,所以我们需要根据不同的情形选择对应的第三方库进行绘图,具体问题具体分析。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值