如何在不同的子图中绘制contourf colorbar - matplotlib

时间:2015-09-08 10:19:26

标签: python matplotlib

这是与"How to plot pcolor colorbar in a different subplot - matplotlib"非常相似的问题。我试图在一个单独的子图中绘制一个填充的等高线图和一个带有共享轴和色条的线图(即因此它不会占用轮廓轴的空间,从而破坏了x轴共享)。但是,我的代码中的x轴不能很好地重新缩放:

import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt

z = np.random.rand(20, 20)
x, y = np.arange(20), np.arange(20)
y2 = np.random.rand(20)
fig = plt.figure(figsize=(8, 8))
gs = mpl.gridspec.GridSpec(2, 2, height_ratios=[1, 2], width_ratios=[2, 1])
ax1 = fig.add_subplot(gs[1, 0])
ax2 = fig.add_subplot(gs[0, 0], sharex=ax1)
ax3 = fig.add_subplot(gs[1, 1])
cont = ax1.contourf(x, y, z, 20)
plt.tick_params(which='both', top=False, right=False)
ax2.plot(x, y2, color='g')
plt.tick_params(which='both', top=False, right=False)
cbar = plt.colorbar(cont, cax=ax3)
cbar.set_label('Intensity', rotation=270, labelpad=20)
plt.tight_layout()
plt.show()

产生x轴,从0到20(包括)缩放,而不是0到19,这意味着在填充的等高线图中存在难看的空白。在上面的代码中注释掉sharex=ax1意味着轮廓图的x轴可以很好地缩放,但不能用于上面的线图,而plt.tick_params代码对任一轴都没有影响。 / p>

plot

有没有办法解决这个问题?

2 个答案:

答案 0 :(得分:0)

您还可以关闭此轴上所有后续绘图调用的x轴自动缩放,以便保持contourfsharex=True设置的范围:

ax2.set_autoscalex_on(False)

甚至在您致电ax2.plot()之前就已经来了,我认为这比调用ax2.set_xlim(0, 19)要好,因为您不需要知道可能需要的x轴的实际限制是多少。

import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1.inset_locator import inset_axes

z = np.random.rand(20, 20)
x, y = np.arange(20), np.arange(20)
y2 = np.random.rand(20)
fig = plt.figure(figsize=(8, 8))
gs = mpl.gridspec.GridSpec(2, 1, height_ratios=[1, 2], width_ratios=[2,
1])
ax1 = fig.add_subplot(gs[1, 0])
ax2 = fig.add_subplot(gs[0, 0], sharex=ax1)
cont = ax1.contourf(x, y, z, 20)
plt.tick_params(which='both', top=False, right=False)

ax2.set_autoscalex_on(False)
ax2.plot(x, y2, color='g')

axins = inset_axes(ax1,
           width="5%", # width = 10% of parent_bbox width
           height="100%", # height : 50%
           loc=6,
           bbox_to_anchor=(1.05, 0., 1, 1),
           bbox_transform=ax1.transAxes,
           borderpad=0,
       )

cbar = plt.colorbar(cont, cax=axins)
plt.show()

example

答案 1 :(得分:-1)

您可以在不添加其他轴的情况下使用inset_axes。

class Base[A <: Base[A] : TypeTag] {
  val t = typeOf[A]
}

class X extends Base[X]

enter image description here