首页编程开发Matplotlib【数据可视化(Matplo...

【数据可视化(Matplotlib篇)】24.共享绘图区域的坐标轴

本系列文章配套代码获取有以下两种途径:

  • 通过百度网盘获取:
链接:https://pan.baidu.com/s/1jG-rGG4QMuZu0t0kEEl7SA?pwd=mnsj 提取码:mnsj
  • 前往GitHub获取
https://github.com/returu/Data_Visualization





上一篇介绍了一些子图生成函数,其中因为每个子图绘制的函数不一致,因此会导致每个子图的坐标轴是不一致的。例如,当绘制如下图表时,因为各函数的取值区间不同,使得各子图的坐标轴刻度范围不一致

本次将介绍当在一个画布上绘制多个图表时,如何让多个子图共享坐标轴,从而使得坐标轴数据保持一致
01

共享单一绘图区域的坐标轴


有时可能不需要创建多个绘图区域绘制子图,可以通过twinx()twiny()函数实现共享坐标轴的方式将多张图形绘制在同一个绘图区域内。
例如,将上图中的子图1和子图2、子图3和子图4的两幅图形分别绘制在同一个绘图区域,代码如下所示:
x = np.linspace(0 , 10 , 100)

plt.figure(figsize=(8,8))

ax1 = plt.subplot(2,1,1)
ax1.set_title("子图1-2")
ax1.plot(x+5,np.power(x,1)*8)

ax2 = ax1.twinx() # 和ax1共享x轴
ax2.plot(x+8,np.power(x,2)+20,'r--')
ax2.tick_params('y',colors='r')

ax3 = plt.subplot(2,1,2)
ax3.set_title("子图3-4")
ax3.plot(x*2,np.power(x,0.5)*30)

ax4 = ax3.twiny() # 和ax3共享y轴
ax4.plot(x,np.power(x,4)/100,'r--')
ax4.tick_params('x',colors='r')

plt.suptitle("共享单一绘图区域的坐标轴",color='m') # 显示主标题
plt.tight_layout()
plt.show()

可视化效果如下图所示:

首先,使用subplot()函数(也可以使用subplots()函数生成坐标轴实例ax1

然后,调用实例方法ax1.twinx()生成实例ax2,此时实例ax2x轴与实例ax1x轴是共享的,实例ax2y轴刻度线和刻度标签在右侧轴脊处绘制。使用ax.tick_params()实例方法将右侧y轴刻度线和刻度标签设置成红色

这样,就实现了将两幅图形绘制在同一个绘图区域

相应的,可以调用Axes.twiny()实例方法实现ax3ax4共享y轴的可视化需求。此时,ax4x轴在上侧轴脊处绘制。

02

共享不同子区的坐标轴


有时候,我们需要共享不同子区的绘图区域的坐标轴,以求强化绘图区域的展示效果,实现精简绘图区域的目的。

此时可以通过设置subplots()、subplot_mosaic()函数中的参数sharexsharey的不同取值,实现共享不同子区的绘图区域的坐标轴的需求。

具体而言,参数sharex和参数sharey的取值形式有四种:

  • “row”:每一行的子图的坐标轴取值范围实现共享;

  • “col”每一列的子图的坐标轴取值范围实现共享

  • “all”所有子图的坐标轴取值范围实现共享

  • “none”

其中“all”“none”分别等同于“True”“False”

代码如下所示:

x = np.linspace(0 , 10 , 100)

fig,ax = plt.subplots(2,2,figsize=(8,8),sharex="all"#  sharex="all",所有子图的x轴使用相同范围

ax[0,0].set_title("子图1")
ax[0,0].plot(x+5,np.power(x,1)*8)

ax[0,1].set_title("子图2")
ax[0,1].plot(x+8,np.power(x,2)+20)

ax[1,0].set_title("子图3")
ax[1,0].plot(x*2,np.power(x,0.5)*30)

ax[1,1].set_title("子图4")
ax[1,1].plot(x,np.power(x,4)/100)

plt.suptitle("共享x轴和y轴",color='m')
plt.show()

可视化效果如下图所示:

03

共享个别子区的坐标轴


此时可以通过将需要共享坐标轴的子图实例传递给subplot()函数中的sharexsharey参数,实现共享不同子区的绘图区域的坐标轴的需求。

如果要将图表1、2、4的x轴共享,可以在ax2、ax4实例调用subplot()函数时,传递sharex = ax1参数即可,同理传递sharey = ax1即可共享y

x = np.linspace(0 , 10 , 100)

plt.figure(figsize=(8,8))

ax1 = plt.subplot(2,2,1)
ax1.set_title("子图1")
ax1.plot(x+5,np.power(x,1)*8)

ax2 = plt.subplot(2,2,2, sharex=ax1, sharey=ax1) # 共享x轴和y轴
ax2.set_title("子图2")
ax2.plot(x+8,np.power(x,2)+20)

ax3 = plt.subplot(2,2,3) # 不共享x轴和y轴
ax3.set_title("子图3")
ax3.plot(x*2,np.power(x,0.5)*30)

ax4 = plt.subplot(2,2,4, sharex=ax1, sharey=ax1) # 共享x轴和y轴
ax4.set_title("子图4")
ax4.plot(x,np.power(x,4)/100)

plt.suptitle("共享x轴和y轴",color='m')
plt.show()

可视化效果如下图所示:

从上图可以看到子图12、4的x轴坐标刻度范围已经相同了,子图3因未设置sharexsharey参数,则仍保持原坐标轴刻度范围。

更多内容可以前往官网查看

https://matplotlib.org/stable/


本篇文章来源于微信公众号: 码农设计师

RELATED ARTICLES

欢迎留下您的宝贵建议

Please enter your comment!
Please enter your name here

- Advertisment -

Most Popular

Recent Comments