为了账号安全,请及时绑定邮箱和手机立即绑定

使用子图和带有 matplotlib 的颜色条将 x 轴与 sharex 对齐

使用子图和带有 matplotlib 的颜色条将 x 轴与 sharex 对齐

凤凰求蛊 2021-10-26 16:49:45
我正在尝试使用 pyplot 创建一组共享 x 轴的子图。当图形很简单并且所有 x 轴都对齐时,这一切都很好。但是,当我包含一个包含颜色条的子图时,这会压缩该特定子图的宽度以包含颜色条,从而导致子图不再共享 x 轴。我在网上搜索过,但没有成功。我尝试了几种不同的方法,但我在下面包含了最简单的示例。我在每个子图中绘制完全相同的数据,但用颜色条绘制一个。您可以看到数据不再沿 x 轴对齐。在此先感谢您的帮助!import matplotlib.pyplot as pltfrom mpl_toolkits.axes_grid1 import make_axes_locatableimport numpy as npimport pandas as pdx = np.linspace(0, 10, num=100)y = x ** 2 + 10 * np.random.randn(100)f, (ax1, ax2) = plt.subplots(2,1,sharex=True,figsize=(8,12))im1 = ax1.scatter(x, y, c=y, cmap='magma')divider = make_axes_locatable(ax1)cax = divider.append_axes("right", size="5%", pad=.05)plt.colorbar(im1, cax=cax)im2 = ax2.plot(x, y,'.')plt.show()
查看完整描述

3 回答

?
繁花如伊

TA贡献2012条经验 获得超12个赞

您可以在创建子图时考虑到颜色条的需要。不使用分隔线,而是使用 生成四个不同宽度的子图gridspec_kw。然后,您可以删除cax第二个子图不需要的:


import matplotlib.pyplot as plt

import numpy as np


x = np.linspace(0, 10, num=100)

y = x ** 2 + 10 * np.random.randn(100)




##creating four subplots with unequally divided widths:

f, axes = plt.subplots(

    2,2, sharex='col', figsize=(8,12),

    gridspec_kw = {'width_ratios' : (10,1)},

)

ax1,ax2 = axes[:,0]


##remove unneeded Axes instance:

axes[1,1].remove()


im1 = ax1.scatter(x, y, c=y, cmap='magma')

plt.colorbar(im1, cax=axes[0,1])


im2 = ax2.plot(x, y,'.')


f.savefig('sharex_colorbar.png')

结果如下所示:

//img1.sycdn.imooc.com//6177c17e0001f52c07391025.jpg

作为删除 unneded 子图实例的替代方法,您还可以首先显式生成 gridspec 并仅生成所需的子图。如果您有很多情节,这可能更合适:


from matplotlib.gridspec import GridSpec

gs = GridSpec(nrows=2, ncols=2, width_ratios = (10,1))

f = plt.figure(figsize=(8,12))


ax1 = f.add_subplot(gs[0,0])

ax2 = f.add_subplot(gs[1,0],sharex=ax1)

cax = f.add_subplot(gs[0,1])


im1 = ax1.scatter(x, y, c=y, cmap='magma')

plt.colorbar(im1, cax=cax)


查看完整回答
反对 回复 2021-10-26
  • 3 回答
  • 0 关注
  • 302 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信