¿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).

    12 color cycle

    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ón plt.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ón plt.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