Аргумент c
для scatter
предполагает либо один спецификатор цвета (например, 'blue'
), либо серию спецификаторов цвета (например, ['blue', 'red', ...]
), либо последовательность чисел, которые отображаются с использованием карты цветов (например, [1, 2, 3, 4, ...]
, как вы использовали это здесь).
Однако в вашем закомментированном случае предоставленная вами серия не соответствует вашим данным, поэтому scatter
не знает, что с ней делать.Что вы хотите с ним сделать?
Вы можете, например, попробовать
height1 = np.arange(len(x1))
sc=plt.scatter(x1, y1, c=height1, vmin=np.min(height1)-0.5,
vmax=np.max(height1)+0.5, marker='o', s=40,
cmap=plt.cm.get_cmap('jet', len(height)))
Редактировать : Это работает следующим образом: Каждая точка данных (x,y) связан с элементом в c, то есть c[i]
назначен маркеру в (x[i], y[i])
.Вот почему c
, x
и y
должны иметь одинаковую длину, иначе сопоставление не работает.NaN
значения в c здесь не помогут.Однако ваши значения в c
преобразуются только в цвета, используя указанную вами цветовую карту.А диапазон цветовой карты определяется vmin
и vmax
.Итак, чтобы убедиться, что ваш цвет использует один и тот же диапазон данных для всех ваших наборов данных, просто предварительно вычислите vmin
и vmax
перед построением графика с использованием всех данных и установите его соответствующим образом.
Так в вашем случае:
h1 = np.arange(len(x1))
h2 = np.arange(len(x2))
minval = min([np.min(h) for h in [h1, h2]])
maxval = max([np.max(h) for h in [h1, h2]])
nh = len(np.arange(minval, maxval+1, 1))
, а затем
sc=plt.scatter(x1, y1, c=h1, marker='o', s=40,
vmin=minval-0.5, vmax=maxval+0.5,
cmap=plt.cm.get_cmap('jet', nh)
)
и для цветовой шкалы
cbar=plt.colorbar(sc, cax=cax, ticks=np.arange(minval, maxval+1,1.0))