use*_*817 43 python matplotlib
我有一个python imshow情节,附有一个颜色条.我想将颜色条定位为水平,并在我的情节下面.
我几乎通过以下方式完成了这项工作:
plt.colorbar(orientation="horizontal",fraction=0.07,anchor=(1.0,0.0))
Run Code Online (Sandbox Code Playgroud)
但是颜色条仍然略微重叠(和x轴的标签).我想进一步向下移动颜色条,但我无法弄清楚如何做到这一点.
谢谢.
Imp*_*est 56
pad为了相对于子图移动颜色条,可以使用pad参数来fig.colorbar.
import matplotlib.pyplot as plt
import numpy as np; np.random.seed(1)
fig, ax = plt.subplots(figsize=(4,4))
im = ax.imshow(np.random.rand(11,16))
ax.set_xlabel("x label")
fig.colorbar(im, orientation="horizontal", pad=0.2)
plt.show()
Run Code Online (Sandbox Code Playgroud)
可以使用一个实例make_axes_locatable来划分轴并创建一个与图像图完全对齐的新轴.同样,该pad参数将允许设置两个轴之间的空间.
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import make_axes_locatable
import numpy as np; np.random.seed(1)
fig, ax = plt.subplots(figsize=(4,4))
im = ax.imshow(np.random.rand(11,16))
ax.set_xlabel("x label")
divider = make_axes_locatable(ax)
cax = divider.new_vertical(size="5%", pad=0.7, pack_start=True)
fig.add_axes(cax)
fig.colorbar(im, cax=cax, orientation="horizontal")
plt.show()
Run Code Online (Sandbox Code Playgroud)
可以直接创建两行子图,一行用于图像,一行用于颜色条.然后,设置图形创建中的height_ratiosas gridspec_kw={"height_ratios":[1, 0.05]},使其中一个子图的高度比另一个小得多,这个小的子图可以托管颜色条.
import matplotlib.pyplot as plt
import numpy as np; np.random.seed(1)
fig, (ax, cax) = plt.subplots(nrows=2,figsize=(4,4),
gridspec_kw={"height_ratios":[1, 0.05]})
im = ax.imshow(np.random.rand(11,16))
ax.set_xlabel("x label")
fig.colorbar(im, cax=cax, orientation="horizontal")
plt.show()
Run Code Online (Sandbox Code Playgroud)
tur*_*erm 54
获得对色条位置的良好控制的最佳方法是给它自己的轴.像这样:
# What I imagine your plotting looks like so far
fig = plt.figure()
ax1 = fig.add_subplot(111)
ax1.plot(your_data)
# Now adding the colorbar
cbaxes = fig.add_axes([0.8, 0.1, 0.03, 0.8])
cb = plt.colorbar(ax1, cax = cbaxes)
Run Code Online (Sandbox Code Playgroud)
add_axes方括号中的数字指的是[left,bottom,width,height],其中坐标只是从绘图区域的0到1的分数.