4

我是 matplotlib 的新手,所以我对语言的掌握不够强,无法知道我是否以正确的方式进行此操作,但我一直在寻找答案,但我找不到任何一种方式或其他方式。

我知道如何使用 matplotlib 的 append_axes 定位器函数将直方图附加到 2D 图旁边,例如:

axMain= fig1.add_subplot(111)
cax = plt.contourf(xl,y1,z1)
divider = make_axes_locatable(axMain)
axHisty = divider.append_axes("right", 1.2, pad=0.1, sharey=axMain)
axHisty.plot(x,y)

而且我也知道如何以类似的方式附加颜色条:

divider = make_axes_locatable(axMain)
ax_cb = divider.new_horizontal(size='5%', pad=0.3)
fig1.add_axes(ax_cb)
fig1.colorbar(cax, cax=ax_cb)

我不清楚的是如何在同一个子图中同时执行这两个操作,而不会使两个附加的数字重叠。为了清楚起见,我希望直方图具有与 相同的 y 轴刻度和高度axContour,并且我希望颜色条具有与 相同的高度axContour。ImageGrid 似乎不是我想要的,因为我不想固定我的情节的大小。如果我可以交互地添加/删除这些图形“装饰”,那对我来说会更好,但也许这是不可能的......让我知道!

4

1 回答 1

4

您已经使用divider.append_axes("right", 1.2, pad=0.1, sharey=axMain). 1.2 是新轴的大小。下面是一种使用 绘制三个轴的方法gridspec

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.gridspec as grd
from numpy.random import rand

# add axes
fig1 = plt.figure(1)
gs = grd.GridSpec(1, 3, width_ratios=[5,1, 1], wspace=0.3)
axMain = plt.subplot(gs[0])
axHisty = plt.subplot(gs[1])
ax_cb = plt.subplot(gs[2])

# some things to plot
x = [1,2,3,4]
y = [1,2,3,4]
x1 = [1,2,3,4]
y1 = [1,2,3,4]
z1 = rand(4,4)

# make plots
h = axMain.contourf(x1,y1,z1)
axHisty.plot(x,y)
cb = plt.colorbar(h, cax = ax_cb)

plt.show()

三轴

于 2013-10-23T23:04:35.887 回答