Как я могу создать больше цветов для своего графика?

#python #matplotlib #plot #jupyter-notebook

#python #matplotlib #график #jupyter-ноутбук

Вопрос:

Я пытался создать график с использованием pyplot в matplotlib с 12 разными строками, однако, похоже, что только 10 разных цветов приводят к дублированию двух цветов. Я пытался использовать plt.set_cmap(‘Set3’), чтобы получить больше доступных цветов, но ничего не изменилось. Что мне делать? Я довольно новичок в программировании, поэтому могу упустить что-то, чему еще не научился.

Вот код, который я использую

 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()
 

Комментарии:

1. В основном меня интересует, как изменить цветовую карту этого графика, чтобы включить больше цветов plt.plot(lat, i[:,660], label = месяцы)

Ответ №1:

Вы хотите установить цветовой цикл, а не plt.set_cmap (который устанавливает цветовую карту, используемую для изображений https://matplotlib.org/3.3.3/api/_as_gen/matplotlib.pyplot.set_cmap.html ?выделите = 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()
 

Однако, если вы уже перебираете свои данные, возможно, вам лучше напрямую задать цвет, а не полагаться на prop_cyle (особенно если вы хотите выполнить несколько вызовов построения графиков для разных осей, которые вы хотите синхронизировать).

12 цветовой цикл

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/