Python、Matplotlib自定义坐标轴共享Y轴
Python, Matplotlib custom axes share Y axis
我有简单的代码来创建一个具有 7 个轴/自定义子图的图形(我的理解是子图大小相等且间距相等,在我的特定情况下我需要一个比其余的大)。
fig = plt.figure(figsize = (16,12))
# row 1
ax1 = plt.axes([0.1,0.7,0.2,0.2])
ax2 = plt.axes([0.4,0.7,0.2,0.2])
ax3 = plt.axes([0.7,0.7,0.2,0.2])
# big row 2
ax4 = plt.axes([0.1, 0.4, 0.5, 0.2])
#row 3
ax5 = plt.axes([0.1,0.1,0.2,0.2])
ax6 = plt.axes([0.4,0.1,0.2,0.2])
ax7 = plt.axes([0.7,0.1,0.2,0.2])
我的问题是,如何让所有这些轴共享同一个 y 轴。我在 google/stack 上只能找到子图,例如:
ax = plt.subplot(blah, sharey=True)
但是为创建轴调用相同的东西不起作用:
ax = plt.axes([blah], sharey=True) # throws error
有没有办法做到这一点?我正在使用的是:
这很简单,使用 matplotlib.gridspec.GridSpec
gs=GridSpec(3,3)
创建一个 3x3 网格来放置子图
对于顶部和底部的行,我们只需要为该 3x3 网格上的一个单元格编制索引(例如,gs[0,0]
位于左上角)。
中间一行需要跨越两列,所以我们使用gs[1,0:2]
import matplotlib.pyplot as plt
from matplotlib.gridspec import GridSpec
fig=plt.figure(figsize=(16,12))
gs = GridSpec(3,3)
# Top row
ax1=fig.add_subplot(gs[0,0])
ax2=fig.add_subplot(gs[0,1],sharey=ax1)
ax3=fig.add_subplot(gs[0,2],sharey=ax1)
# Middle row
ax4=fig.add_subplot(gs[1,0:2],sharey=ax1)
# Bottom row
ax5=fig.add_subplot(gs[2,0],sharey=ax1)
ax6=fig.add_subplot(gs[2,1],sharey=ax1)
ax7=fig.add_subplot(gs[2,2],sharey=ax1)
ax1.set_ylim(-15,10)
plt.show()
我有简单的代码来创建一个具有 7 个轴/自定义子图的图形(我的理解是子图大小相等且间距相等,在我的特定情况下我需要一个比其余的大)。
fig = plt.figure(figsize = (16,12))
# row 1
ax1 = plt.axes([0.1,0.7,0.2,0.2])
ax2 = plt.axes([0.4,0.7,0.2,0.2])
ax3 = plt.axes([0.7,0.7,0.2,0.2])
# big row 2
ax4 = plt.axes([0.1, 0.4, 0.5, 0.2])
#row 3
ax5 = plt.axes([0.1,0.1,0.2,0.2])
ax6 = plt.axes([0.4,0.1,0.2,0.2])
ax7 = plt.axes([0.7,0.1,0.2,0.2])
我的问题是,如何让所有这些轴共享同一个 y 轴。我在 google/stack 上只能找到子图,例如:
ax = plt.subplot(blah, sharey=True)
但是为创建轴调用相同的东西不起作用:
ax = plt.axes([blah], sharey=True) # throws error
有没有办法做到这一点?我正在使用的是:
这很简单,使用 matplotlib.gridspec.GridSpec
gs=GridSpec(3,3)
创建一个 3x3 网格来放置子图
对于顶部和底部的行,我们只需要为该 3x3 网格上的一个单元格编制索引(例如,gs[0,0]
位于左上角)。
中间一行需要跨越两列,所以我们使用gs[1,0:2]
import matplotlib.pyplot as plt
from matplotlib.gridspec import GridSpec
fig=plt.figure(figsize=(16,12))
gs = GridSpec(3,3)
# Top row
ax1=fig.add_subplot(gs[0,0])
ax2=fig.add_subplot(gs[0,1],sharey=ax1)
ax3=fig.add_subplot(gs[0,2],sharey=ax1)
# Middle row
ax4=fig.add_subplot(gs[1,0:2],sharey=ax1)
# Bottom row
ax5=fig.add_subplot(gs[2,0],sharey=ax1)
ax6=fig.add_subplot(gs[2,1],sharey=ax1)
ax7=fig.add_subplot(gs[2,2],sharey=ax1)
ax1.set_ylim(-15,10)
plt.show()