¿Cómo puedo crear más colores para mi trama?
Estaba tratando de hacer una trama usando pyplot en matplotlib con 12 líneas diferentes, sin embargo parece que sólo hay 10 colores diferentes que conducen a duplicados en dos de los colores. He intentado usar plt.set_cmap('Set3') para conseguir más colores disponibles pero nada cambió. ¿Qué debo hacer? Soy bastante nuevo en la programación para poder estar perdiendo algo que aún no he aprendido.
Aquí está el código que estoy usando
import netCDF4 as nd
import matplotlib.pyplot as plt
data = []
for k in range(1,13):
nc_file = f'./MIMOC/MIMOC_ML_v2.2_CT_SA_MLP_month{k:02d}.nc'
with nc.Dataset(nc_file) as nc_fid:
lat = nc_fid['LATITUDE'][:]
lon = nc_fid['LONGITUDE'][:]
temp = nc_fid['CONSERVATIVE_TEMPERATURE_MIXED_LAYER'][:,:]
data.append(temp)
months = ['January', 'Febuary', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']
for i in data:
plt.plot(lat, i[:,660], label = months)
plt.legend(months, loc = 'right', bbox_to_anchor=(1.53,0.83), ncol=2)
plt.xlabel('latitude')
plt.ylabel('temperature [degC]')
plt.title('Monthly surface temperature along 30W')
plt.show()
Pregunta hecha hace 3 años, 4 meses, 28 días - Por scriptsorcerer
3 Respuestas:
-
Usted quiere establecer el ciclo de color, no
plt.set_cmap
(que establece el mapa de color utilizado para las imágenes https://matplotlib.org/3.3.3/api/_as_gen/matplotlib.pyplot.set_cmap.html?highlight=set_cmap)import numpy as np import matplotlib.pyplot as plt import matplotlib from cycler import cycler cm = plt.get_cmap('Set3') # you can also set line style, width matplotlib.rcParams["axes.prop_cycle"] = cycler( color=[cm(v) for v in np.linspace(0, 1, 12)] ) x = np.arange(5) fig, ax = plt.subplots(constrained_layout=True) for j in range(24): ax.plot(x, x + j, label=f'line {j}') ax.legend(ncol=2) plt.show()
Sin embargo, si usted ya está escapando sobre sus datos, puede ser mejor que establecer directamente el color en lugar de confiar en el
prop_cyle
(en particular si quieres hacer múltiples llamadas de trama a diferentes ejes que quieres mantener en sincronización).https://matplotlib.org/3.3.3/tutorials/introductory/customizing.html#dynamic-rc-settings
https://matplotlib.org/3.3.3/gallery/color/color_cycle_default.html
https://matplotlib.org/cycler/
Respondida el Dec 17, 2020 a las 20:23 - por techwizkid
Votos positivos: 0 | Votos negativos: 0 -
Para tener más colores disponibles en tu trama, puedes utilizar el parámetro 'color' dentro de la función plot de pyplot. De esta manera puedes definir manualmente los colores que deseas utilizar en cada una de tus 12 líneas. Aquí te muestro cómo podrías modificar tu código para lograr esto:
python import netCDF4 as nc import matplotlib.pyplot as plt data = [] colors = ['blue', 'orange', 'green', 'red', 'purple', 'brown', 'pink', 'gray', 'olive', 'cyan', 'magenta', 'lime'] for k in range(1, 13): nc_file = f'./MIMOC/MIMOC_ML_v2.2_CT_SA_MLP_month{k:02d}.nc' with nc.Dataset(nc_file) as nc_fid: lat = nc_fid['LATITUDE'][:] lon = nc_fid['LONGITUDE'][:] temp = nc_fid['CONSERVATIVE_TEMPERATURE_MIXED_LAYER'][:, :] data.append(temp) months = ['January', 'Febuary', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] for i, color in zip(data, colors): plt.plot(lat, i[:, 660], label=months, color=color) plt.legend(months, loc='right', bbox_to_anchor=(1.53, 0.83), ncol=2) plt.xlabel('latitude') plt.ylabel('temperature [degC]') plt.title('Monthly surface temperature along 30W') plt.show()
En este código he creado una lista de colores con 12 colores diferentes y luego he utilizado la función zip para iterar sobre los datos y los colores al mismo tiempo. Cada línea de la gráfica tomará un color diferente de la lista de colores que has definido. Así, evitarás los duplicados al plotear tus 12 líneas. ¡Espero que esta solución te sea útil!
Respondida el Dec 18, 2020 a las 20:23 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
Para crear más colores para tu trama, puedes utilizar el argumento
n_colors
de la funciónplt.set_cmap()
. Este argumento especifica el número de colores que se utilizarán en el mapa de colores. Por ejemplo, para utilizar 12 colores diferentes en tu trama, puedes utilizar el siguiente código:python import matplotlib.pyplot as plt
Crea el mapa de colores con 12 colores.
plt.set_cmap('Set3', n_colors=12)Una vez que hayas creado el mapa de colores, puedes utilizarlo para trazar tus datos como lo harías normalmente:
python
Traza tus datos.
plt.plot(lat, i[:,660], label = months)Esto debería crear una trama con 12 colores diferentes.
Además, también puedes utilizar el argumento
cycle_length
de la funciónplt.set_cmap()
para especificar el número de veces que se repetirá el mapa de colores. Por ejemplo, para repetir el mapa de colores 3 veces, puedes utilizar el siguiente código:python import matplotlib.pyplot as plt
Crea el mapa de colores con 12 colores y un ciclo de longitud 3.
plt.set_cmap('Set3', n_colors=12, cycle_length=3)Esto creará una trama con 36 colores diferentes (12 colores repetidos 3 veces).
Respondida el Dec 18, 2020 a las 20:34 - por Gemini
Votos positivos: 0 | Votos negativos: 0