我有一个简单的散点图,其中每个点都有一个颜色,该值由0到1之间的值设置为选定的色彩映射。这是我的代码MWE
:
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.gridspec as gridspec
x = np.random.randn(60)
y = np.random.randn(60)
z = [np.random.random() for _ in range(60)]
fig = plt.figure()
gs = gridspec.GridSpec(1, 2)
ax0 = plt.subplot(gs[0, 0])
plt.scatter(x, y, s=20)
ax1 = plt.subplot(gs[0, 1])
cm = plt.cm.get_cmap('RdYlBu_r')
plt.scatter(x, y, s=20 ,c=z, cmap=cm)
cbaxes = fig.add_axes([0.6, 0.12, 0.1, 0.02])
plt.colorbar(cax=cbaxes, ticks=[0.,1], orientation='horizontal')
fig.tight_layout()
plt.show()
看起来像这样:
这里的问题是我希望小的水平颜色条位置位于图的左下方,但使用cax
参数不仅感觉有点hacky,它显然与tight_layout
冲突导致警告:
/usr/local/lib/python2.7/dist-packages/matplotlib/figure.py:1533: UserWarning: This figure includes Axes that are not compatible with tight_layout, so its results might be incorrect.
warnings.warn("This figure includes Axes that are not "
是否有更好的方法来定位颜色条,即在运行代码时没有向您发出令人讨厌的警告?
我希望colorbar只显示最大值和最小值,即:0和1,Joe通过将vmin=0, vmax=1
添加到scatter
来帮助我这样做:
plt.scatter(x, y, s=20, vmin=0, vmax=1)
所以我要删除这部分问题。
答案 0 :(得分:6)
可以使用mpl_toolkits.axes_grid1.inset_locator.inset_axes
将轴放在另一个轴内。该轴可用于托管彩条。它的位置是相对于父轴的,类似于传说的放置方式,使用loc
参数(例如loc=3
表示左下角)。它的宽度和高度可以用绝对数字(英寸)或相对于父轴(百分比)来指定。
cbaxes = inset_axes(ax1, width="30%", height="3%", loc=3)
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.gridspec as gridspec
from mpl_toolkits.axes_grid1.inset_locator import inset_axes
x = np.random.randn(60)
y = np.random.randn(60)
z = [np.random.random() for _ in range(60)]
fig = plt.figure()
gs = gridspec.GridSpec(1, 2)
ax0 = plt.subplot(gs[0, 0])
plt.scatter(x, y, s=20)
ax1 = plt.subplot(gs[0, 1])
cm = plt.cm.get_cmap('RdYlBu_r')
plt.scatter(x, y, s=20 ,c=z, cmap=cm)
fig.tight_layout()
cbaxes = inset_axes(ax1, width="30%", height="3%", loc=3)
plt.colorbar(cax=cbaxes, ticks=[0.,1], orientation='horizontal')
plt.show()
请注意,为了抑制警告,可以在添加插入轴之前调用tight_layout
。