本系列文章配套代码获取有以下两种途径:
-
通过百度网盘获取:
链接:https://pan.baidu.com/s/1jG-rGG4QMuZu0t0kEEl7SA?pwd=mnsj
提取码:mnsj
-
前往GitHub获取:
https://github.com/returu/Data_Visualization
共享单一绘图区域的坐标轴:
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,此时实例ax2的x轴与实例ax1的x轴是共享的,实例ax2的y轴刻度线和刻度标签在右侧轴脊处绘制。使用ax.tick_params()实例方法将右侧y轴刻度线和刻度标签设置成红色。
这样,就实现了将两幅图形绘制在同一个绘图区域。
相应的,可以调用Axes.twiny()实例方法实现ax3和ax4共享y轴的可视化需求。此时,ax4的x轴在上侧轴脊处绘制。
共享不同子区的坐标轴:
有时候,我们需要共享不同子区的绘图区域的坐标轴,以求强化绘图区域的展示效果,实现精简绘图区域的目的。
此时可以通过设置subplots()、subplot_mosaic()等函数中的参数sharex、sharey的不同取值,实现共享不同子区的绘图区域的坐标轴的需求。
具体而言,参数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()
可视化效果如下图所示:
共享个别子区的坐标轴:
此时可以通过将需要共享坐标轴的子图实例传递给subplot()函数中的sharex、sharey参数,实现共享不同子区的绘图区域的坐标轴的需求。
如果要将图表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()
可视化效果如下图所示:
更多内容可以前往官网查看:
https://matplotlib.org/stable/
本篇文章来源于微信公众号: 码农设计师