xticks pyplot font example python graph matplotlib

python - pyplot - matplotlib xticks



Establecer rango de barra de color en matplotlib (3)

Tengo el siguiente código:

import matplotlib.pyplot as plt cdict = { ''red'' : ( (0.0, 0.25, .25), (0.02, .59, .59), (1., 1., 1.)), ''green'': ( (0.0, 0.0, 0.0), (0.02, .45, .45), (1., .97, .97)), ''blue'' : ( (0.0, 1.0, 1.0), (0.02, .75, .75), (1., 0.45, 0.45)) } cm = m.colors.LinearSegmentedColormap(''my_colormap'', cdict, 1024) plt.clf() plt.pcolor(X, Y, v, cmap=cm) plt.loglog() plt.xlabel(''X Axis'') plt.ylabel(''Y Axis'') plt.colorbar() plt.show()

Entonces esto produce un gráfico de los valores ''v'' en los ejes X vs Y, usando el mapa de colores especificado. Los ejes X e Y son perfectos, pero el mapa de colores se extiende entre el mínimo y el máximo de v. Me gustaría forzar el mapa de colores para que oscile entre 0 y 1.

Pensé en usar:

plt.axis(...)

Para establecer los rangos de los ejes, pero esto solo toma argumentos para el mínimo y el máximo de X e Y, no el mapa de colores.

Editar:

Para mayor claridad, digamos que tengo un gráfico cuyos valores varían (0 ... 0.3) y otro gráfico cuyos valores (0.2 ... 0.8).

En ambos gráficos, querré que el rango de la barra de color sea (0 ... 1). En ambos gráficos, quiero que este rango de color sea idéntico usando el rango completo de cdict anterior (por lo que 0.25 en ambos gráficos será del mismo color). En el primer gráfico, todos los colores entre 0.3 y 1.0 no se mostrarán en el gráfico, sino que aparecerán en la barra de color de la barra lateral. En el otro, todos los colores entre 0 y 0.2, y entre 0.8 y 1 no aparecerán en el gráfico, sino que aparecerán en la barra de color al costado.


No estoy seguro de si esta es la solución más elegante (esto es lo que usé), pero podría escalar sus datos al rango entre 0 y 1 y luego modificar la barra de colores:

import matplotlib as mpl ... ax, _ = mpl.colorbar.make_axes(plt.gca(), shrink=0.5) cbar = mpl.colorbar.ColorbarBase(ax, cmap=cm, norm=mpl.colors.Normalize(vmin=-0.5, vmax=1.5)) cbar.set_clim(-2.0, 2.0)

Con los dos límites diferentes, puede controlar el alcance y la leyenda de la barra de colores. En este ejemplo, solo el rango entre -0.5 a 1.5 se muestra en la barra, mientras que el mapa de colores cubre de -2 a 2 (por lo que este podría ser su rango de datos, que registrará antes de escalar).

Entonces, en lugar de escalar el mapa de colores, escalará sus datos y ajustará la barra de colores a eso.


Usar vmin y vmax fuerza el rango para los colores. Aquí hay un ejemplo:

import matplotlib as m import matplotlib.pyplot as plt import numpy as np cdict = { ''red'' : ( (0.0, 0.25, .25), (0.02, .59, .59), (1., 1., 1.)), ''green'': ( (0.0, 0.0, 0.0), (0.02, .45, .45), (1., .97, .97)), ''blue'' : ( (0.0, 1.0, 1.0), (0.02, .75, .75), (1., 0.45, 0.45)) } cm = m.colors.LinearSegmentedColormap(''my_colormap'', cdict, 1024) x = np.arange(0, 10, .1) y = np.arange(0, 10, .1) X, Y = np.meshgrid(x,y) data = 2*( np.sin(X) + np.sin(3*Y) ) def do_plot(n, f, title): #plt.clf() plt.subplot(1, 3, n) plt.pcolor(X, Y, f(data), cmap=cm, vmin=-4, vmax=4) plt.title(title) plt.colorbar() plt.figure() do_plot(1, lambda x:x, "all") do_plot(2, lambda x:np.clip(x, -4, 0), "<0") do_plot(3, lambda x:np.clip(x, 0, 4), ">0") plt.show()


Use la función CLIM (equivalente a la función CAXIS en MATLAB):

plt.pcolor(X, Y, v, cmap=cm) plt.clim(-4,4) plt.show()