如何为彩条提供相同的高度?

时间:2014-11-12 22:00:45

标签: python matplotlib

我想绘制一些数据,但颜色条高于绘图。我该如何解决这个问题?

import numpy as np
import matplotlib.pyplot as plt
import scipy.interpolate

fig, ax = plt.subplots()
# Generate data:
x = np.linspace(1, 1, 10)
y = np.linspace(1,100, 10)

for i in range(10, 100, 10):
    x = append(x, np.linspace(i, i, 10))
    y = append(y, np.linspace(1, 100, 10))

z = numpy.random.uniform(-5, 5, size=100)

# Set up a regular grid of interpolation points
xi, yi = np.linspace(x.min(), x.max(), 100), np.linspace(y.min(), y.max(), 100)
xi, yi = np.meshgrid(xi, yi)

# Interpolate
rbf = scipy.interpolate.Rbf(x, y, z, function='linear')
zi = rbf(xi, yi)

s = ax.imshow(zi, vmin=z.min(), vmax=z.max(), origin='lower',
           extent=[x.min(), x.max(), y.min(), y.max()])
plt.xlim([0,200])

#s = ax.scatter(x, y, c=z, marker = 's')
plt.colorbar(mappable=s, ax=ax)
plt.show()

enter image description here

1 个答案:

答案 0 :(得分:1)

最简单的解决方案(对于您的示例)是删除行

plt.xlim([0,200])

但是既然你把它放在那里,我认为你真的想要/需要它。那么,你必须手动调整颜色条的高度:

cb = plt.colorbar(mappable=s, ax=ax)
plt.draw()
posax =  ax.get_position()
poscb = cb.ax.get_position()
cb.ax.set_position([poscb.x0, posax.y0, poscb.width, posax.height])

使用shrink的{​​{1}}参数作为@MaxNoe建议也可能会有所帮助。但是你必须摆弄它才能获得正确的价值。