python - 使用 matplotlib 使用 subplots 和 colorbar 将 x 轴与 sharex 对齐
问题描述
我正在尝试使用 pyplot 创建一组具有共享 x 轴的子图。当图形很简单并且所有 x 轴都对齐很好时,这一切都很好。但是,当我包含一个包含颜色条的子图时,这会压缩该特定子图的宽度以包含颜色条,从而导致子图不再共享 x 轴。
我已经在网上搜索过,但没有成功。我尝试了几种不同的方法,但最简单的例子包括在下面。我在每个子图中绘制完全相同的数据,但用颜色条绘制一个。您可以看到数据不再沿 x 轴对齐。
在此先感谢您的帮助!
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import make_axes_locatable
import numpy as np
import pandas as pd
x = 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()
解决方案
建议使用constrained_layout=True
: https ://matplotlib.org/stable/tutorials/intermediate/constrainedlayout_guide.html
import matplotlib.pyplot as plt
import numpy as np
x = 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),
constrained_layout=True)
im1 = ax1.scatter(x, y, c=y, cmap='magma')
f.colorbar(im1, ax=ax1)
im2 = ax2.plot(x, y,'.')
推荐阅读
- python - sum 每次都可以被列表的一个元素整除
- c - C - 将错误的指针类型传递给函数
- c++ - 我不能在 C++ 上使用 fmt 库头文件
- java - 更新集合内的列表 dbref
- python - 如何在 Python 中使用 BeautifulSoup 从 html 中提取特定文本?
- sql - ORA-00906: 缺少左括号 oracle 错误可能是因为我弄乱了语法
- python - 在python中实现Backwards Euler方法来解决钟摆
- html - 如何仅对 CSS 中的给定形状应用过滤器?
- javascript - 客户端 JS/Angular 中是否存在 HTTP 连接超时?
- vue.js - Vue js Vue-cli 执行“npm run build”,将图像不透明度的 css 编译为 1%