Matplotlib: agrega una barra de color a un objeto no asignable

Tengo una serie de líneas que representan el cambio de una variable; Cada uno con un color único. Por esa razón quiero agregar una barra de colores al lado del gráfico. La salida deseada se muestra a continuación.

El problema es que la plot es un objeto no asignable, es decir, la barra de colores se debe agregar manualmente. Considero que mi solución actual (a continuación) no es óptima, ya que involucra parámetros de tamaño que no tengo interés en controlar. Prefiero una solución similar a la de un objeto asignable (ejemplo debajo de la solución actual).

Salida deseada

Salida deseada

Solución actual

 import numpy as np import matplotlib as mpl import matplotlib.pyplot as plt x = np.linspace(0, 5, 100) N = 20 cmap = plt.get_cmap('jet',N) fig = plt.figure(figsize=(8,6)) ax1 = fig.add_axes([0.10,0.10,0.70,0.85]) for i,n in enumerate(np.linspace(0,2,N)): y = np.sin(x)*x**n ax1.plot(x,y,c=cmap(i)) plt.xlabel('x') plt.ylabel('y') ax2 = fig.add_axes([0.85,0.10,0.05,0.85]) norm = mpl.colors.Normalize(vmin=0,vmax=2) cb1 = mpl.colorbar.ColorbarBase(ax2,cmap=cmap,norm=norm,orientation='vertical') plt.show() 

Solución deseada

(obviamente reemplazando imshow )

 fig,ax = plt.subplots() cax = ax.imshow(..) cbar = fig.colorbar(cax,aspect=10) plt.show() 

Puede definir su propio ScalarMappable y usarlo como si estuviera presente en la ttwig.
(Tenga en cuenta que cambié el número de colores f a 21 para tener espacios agradables de 0.1 )

 import numpy as np import matplotlib as mpl import matplotlib.pyplot as plt x = np.linspace(0, 5, 100) N = 21 cmap = plt.get_cmap('jet',N) fig = plt.figure(figsize=(8,6)) ax1 = fig.add_axes([0.10,0.10,0.70,0.85]) for i,n in enumerate(np.linspace(0,2,N)): y = np.sin(x)*x**n ax1.plot(x,y,c=cmap(i)) plt.xlabel('x') plt.ylabel('y') norm = mpl.colors.Normalize(vmin=0,vmax=2) sm = plt.cm.ScalarMappable(cmap=cmap, norm=norm) sm.set_array([]) plt.colorbar(sm, ticks=np.linspace(0,2,N), boundaries=np.arange(-0.05,2.1,.1)) plt.show() 

introduzca la descripción de la imagen aquí