【问题标题】:How to Make a Plot with Two Different Y-axis in Python如何在 Python 中绘制具有两个不同 Y 轴的绘图
【发布时间】:2020-06-16 09:11:23
【问题描述】:

我有一个 2D 数组,我使用这些数据来绘制图,如下所示:

data = [[2.01756016,  2.83041846,  3.81709531,  4.98948707,  6.2480729],
 [2.01756016, 2.59428527, 3.42083514, 4.15525314, 4.87254428],
 [2.01756016, 2.47796649, 2.95297856, 3.37313728, 3.66131579],
 [2.01756016, 2.24718239, 2.56393939, 2.70463483, 2.65250443]]

fig, ax = plt.subplots(figsize=(6, 6))

sidex = np.linspace(0.875, 2.125, 6)
sidey = np.linspace(5, 45, 5)

x, y = np.meshgrid(sidex, sidey)
z = [[data[i][j] for j in range(len(data[0]))] for i in range(len(data))]
plt.pcolormesh(x, y, z)

plt.xticks([1, 1.25, 1.5, 1.75, 2])
plt.yticks([10, 20, 30, 40])

plt.xlabel('X')
plt.ylabel('Y')


plt.show()

现在我正在尝试更改 y 轴

  1. 使y轴从Y到Y/10

  2. 在绘图右侧创建第二个 y 轴:Y/100

如下图。我怎样才能做到这一点?

我尝试将plt.yticks([10, 20, 30, 40])改成plt.yticks([1, 2, 3, 4]),但结果不是我想要的。

【问题讨论】:

    标签: python arrays matplotlib


    【解决方案1】:

    您可以使用twinx() 来实现它。我建议使用ax.set_yticksax.set_yticklabels 进行更多控制,但也可以使用plt.yticks(ticks=ticks, labels=labels)

    编辑:我在绘图中添加了一个颜色条。创建颜色条时,您可以指定mappable(颜色应匹配的对象)作为第一个参数。为此,我将 colormesh 分配给一个变量以供以后重用 (image = ax.pcolormesh(x, y, z))。

    data = [[2.01756016,  2.83041846,  3.81709531,  4.98948707,  6.2480729],
     [2.01756016, 2.59428527, 3.42083514, 4.15525314, 4.87254428],
     [2.01756016, 2.47796649, 2.95297856, 3.37313728, 3.66131579],
     [2.01756016, 2.24718239, 2.56393939, 2.70463483, 2.65250443]]
    
    fig, ax = plt.subplots(figsize=(6, 6))
    
    ax2 = ax.twinx()
    
    sidex = np.linspace(0.875, 2.125, 6)
    sidey = np.linspace(5, 45, 5)
    
    x, y = np.meshgrid(sidex, sidey)
    z = [[data[i][j] for j in range(len(data[0]))] for i in range(len(data))]
    image = ax.pcolormesh(x, y, z)
    
    ax.set_xticks([1, 1.25, 1.5, 1.75, 2])
    ax.set_yticks([10, 20, 30, 40])
    ax.set_yticklabels([1, 2, 3, 4])
    ax2.set_yticks([10, 20, 30, 40])
    ax2.set_yticklabels([10, 20, 30, 40])
    ax2.set_ylim(ax.get_ylim())
    
    fig.colorbar(image, pad=0.1)
    
    ax.set_xlabel('X')
    ax.set_ylabel('Y/10')
    ax2.set_ylabel('Y')
    plt.tight_layout()
    
    plt.show()
    

    【讨论】:

    • 你知道在这个例子中如何添加颜色条吗?我试图在“plt.show()”前面添加“plt.colorbar()”,但它不起作用。
    • 非常感谢您的回答。我还有一个问题,为什么“xlabel”没有出现在情节中?
    • plt.something 函数的问题在于,它们总是需要弄清楚使用哪个AxesFigure 来绘制。有时结果不是你想要的。也许这个matplotlib tutorial 对你来说可能很有趣。我现在修复了上图中的标签。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-17
    • 2018-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多