Matplotlib 在Pyplot子图中删除框架同时保持坐标轴

Matplotlib 在Pyplot子图中删除框架同时保持坐标轴

阅读更多:Matplotlib 教程

概述

Matplotlib是一个广泛使用的Python绘图库,其功能强大,可用于创建各种类型的图表。在进行数据可视化时,常常需要同时绘制多个子图,这时,Matplotlib提供了pyplot.subplots() 方法,它能够轻松创建多个子图,并且提供了很多个性化设置,比如frameon参数,可以决定是否显示子图框架(默认显示)。然而,当我们需要在子图上绘制许多数据点时,子图框架往往会占据大量空间,这时如何保持坐标轴,并删除子图框架,需要我们掌握一些技巧。

例子

我们来尝试绘制一组数据,并将其分别展示在两个子图中。

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)

fig, (ax1, ax2) = plt.subplots(ncols=2)

ax1.plot(x, y1)
ax1.set_title('subplot 1')
ax1.set_xlabel('x')
ax1.set_ylabel('y1')

ax2.plot(x, y2)
ax2.set_title('subplot 2')
ax2.set_xlabel('x')
ax2.set_ylabel('y2')

plt.show()
Python

运行上述代码,我们会得到一个带有子图框架的图表。此时,我们可以通过修改frameon参数,将子图框架删除。具体来说,我们可以在设置子图时将frameon参数设为False即可。

fig, (ax1, ax2) = plt.subplots(ncols=2, frameon=False)
Python

运行上述代码,我们会发现子图框架已经被删除了。但是,此时的子图上仅有坐标轴,缺少了子图的背景颜色,以及其他可能的子图设置配置。因此,我们需要在删除子图框架的前提下,进一步美化子图。

(1)颜色填充

我们可以为每个子图添加不同的背景色,使用ax.fill()方法即可。具体来说,在绘制曲线之前,我们执行以下代码:

ax1.fill(x, y1, color='lightgray', alpha=0.5, edgecolor='blue')
ax2.fill(x, y2, color='pink', alpha=0.5, edgecolor='green')
Python

运行上述代码后,我们会看到一个带有填充色的子图,同时已删除框架。其中,alpha参数控制透明度,edgecolor参数控制边缘颜色。

(2)边界宽度

如果希望子图边界更突出,可以使用set linewidth()方法,控制边界宽度。

ax1.spines['top'].set_linewidth(2)
ax1.spines['bottom'].set_linewidth(2)
ax1.spines['left'].set_linewidth(2)
ax1.spines['right'].set_linewidth(2)
ax2.spines['top'].set_linewidth(2)
ax2.spines['bottom'].set_linewidth(2)
ax2.spines['left'].set_linewidth(2)
ax2.spines['right'].set_linewidth(2)
Python

运行上述代码,我们会看到一个较为突出的子图边界。

(3)边界颜色

除此之外,我们还可以单独为每个子图设置边界颜色,例如:

ax1.spines['bottom'].set_color('blue')
ax1.spines['top'].set_color('blue')
ax1.spines['right'].set_color('blue')
ax1.spines['left'].set_color('blue')

ax2.spines['bottom'].set_color('green')
ax2.spines['top'].set_color('green')
ax2.spines['right'].set_color('green')
ax2.spines['left'].set_color('green')
Python

运行上述代码,我们会发现子图边界已经发生了颜色变化。

(4)刻度线颜色

在绘制图表时,有时可能需要修改刻度线的颜色。例如,我们可以将刻度线的颜色与子图边界颜色保持一致:

for tick in ax1.xaxis.get_major_ticks() + ax1.yaxis.get_major_ticks():
    tick.set_color('blue')

for tick in ax2.xaxis.get_major_ticks() + ax2.yaxis.get_major_ticks():
    tick.set_color('green')
Python

运行上述代码,我们会看到刻度线颜色与子图边界颜色保持一致的效果。

总结

在Matplotlib中,我们可以使用pyplot.subplots()方法绘制多个子图。在绘制子图时,有时需要删除子图框架以便更好地展示数据。要实现这一点,我们可以将子图的frameon参数设为False。同时,为了美化子图,我们可以为每个子图添加不同的颜色填充。此外,我们还可以使用spines()方法控制子图边界宽度和颜色。最后,我们可以使用get_major_ticks()方法修改刻度线颜色。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册