Matplotlib有几个子图和轴

时间:2017-10-26 14:17:08

标签: python matplotlib

我试图使用matplotlib绘制几个子图,每个子图有2个y轴(两条曲线之间的值完全不同,所以我必须在不同的y轴上绘制它们)

要绘制一个带有2个y轴的图形,我会这样做:

fig, ax1 = plt.subplots(figsize=(16, 10))
ax2 = ax1.twinx()
ax1.plot(line1, 'r')
ax2.plot(line2, 'g')

绘制2个子图,每个曲线对应一个:

plt.subplot(2,1,1)
plt.plot(line1, 'r')
plt.subplot(2,1,2)
plt.plot(line2, 'g')

我无法合并这两种方法。

我想要类似的东西:

fig, ax1 = plt.subplots(figsize=(16, 10))
plt.subplot(2,1,1)
ax2 = ax1.twinx()
ax1.plot(line1, 'r')
ax2.plot(line2, 'g')
plt.subplot(2,1,2)
ax1.plot(line3, 'r')
ax2.plot(line4, 'g')

但是这不起作用,它只显示了2个空的子图。

我该怎么做?

1 个答案:

答案 0 :(得分:2)

您应首先创建子图,然后为每个子图创建两个轴。使用轴对象中包含的方法更容易进行绘图,而不是高级绘图函数调用。

axes返回的subplots是一个轴数组。如果您只有1列或1行,则它是1-D数组,但如果两者都大于1,则它是2-D数组。在后一种情况下,您需要.ravel()轴数组或迭代行,然后遍历每行中的轴。

import numpy as np
import matplotlib.pyplot as plt

# create a figure with 4 subplot axes
fig, axes = plt.subplots(2,2, figsize=(8,8))

for ax_row in axes:
    for ax in ax_row:
        # create a twin of the axis that shares the x-axis
        ax2 = ax.twinx()
        # plot some data on each axis.
        ax.plot(np.arange(50), np.random.randint(-10,10, size=50).cumsum())
        ax2.plot(np.arange(50), 100+np.random.randint(-100,100, size=50).cumsum(), 'r-')

plt.tight_layout()
plt.show()

enter image description here