У меня есть переменная, назовем ее Ecozone
(синий разброс). Я хочу построить их в одном сюжете. Для Ecozone
я хочу попробовать что-то более сложное. Вместо разброса я хочу иметь цветную полосу (положение цветной полосы: вдоль оси x, где-то между -5 до 0 [левая ось y]). И каждый уникальный номер представляет свой цвет. Чтобы упростить процесс, я вставил массив и цвет ниже:
>>Ecozone.shape
Output: (169,)
>>Ecozone_unique = np.unique(Ecozone)[~np.isnan(np.unique(Ecozone))]
>>Ecozone_unique
Output: array([ 85., 101., 228., 349., 402., 417., 448., 461., 576., 636., 722.,
756., 798., 831.])
color = ['#a6cee3', '#1f78b4', '#b2df8a', '#33a02c', '#fb9a99', '#e31a1c', '#fdbf6f',
'#ff7f00', '#cab2d6', '#6a3d9a', '#ffff99', '#b15928', '#8c510a', '#bf812d']
# Thus one color for each individual value
color_sel = []
for value in Ecozone:
for i in range(0,Ecozone_unique.shape[0]):
if value == Ecozone_unique[i]:
color_sel.append(color[i])
else:
continue
Я поместил каждое значение в отдельный цвет в color_sel
. (Код для color_sel может быть предоставлен при необходимости)
#Below is the code for colorbar
import matplotlib as mpl
mpl.rcParams.update({'font.size': 15})
hfont = {'fontname':'Arial'}
fig=plt.figure(figsize=(15,3))
ax=fig.add_subplot(111)
vals=Ecozone_unique
cmap = mpl.colors.ListedColormap(np.array(color_sel))
cb = mpl.colorbar.ColorbarBase(ax, cmap=cmap,
spacing='uniform',
orientation='horizontal',
extend='neither',
ticks=vals)
cb.set_label('Ecozones', **hfont)
ax.set_position((0.1, 0.45, 0.8, 0.1))
Я хочу поместить эту цветную полосу в мой окончательный график. С некоторым кодом и Навыки Power Point, мой окончательный сюжет должен понравиться ниже.
fig, ax1 = plt.subplots(figsize = (15,6))
ax2 = ax1.twinx()
ax1.scatter(np.linspace(0,S_r_yhat_BESS.shape[0]-1,S_r_yhat_BESS.shape[0]+1), Ecozone)
ax1.set_ylim(-50,900)