Изменение цвета matplotlib по умолчанию при сохранении названия цвета

#python #matplotlib

Вопрос:

Я хотел бы изменить цвета matplotlib по умолчанию. Поскольку я уже пробовал сам и нашел решение своей проблемы, изменив цветовой циклер по умолчанию, это не идеальное решение, которое я искал :

 import matplotlib as mpl

mpl.rcParams['axes.prop_cycle'] = mpl.cycler(color=["#013c9b",# my Blue
                                                    "#e0012e",# my Red
                                                    "#80cd59",# my Green
                                                    "#f6960a",# my Orange
                                                    "#4f94d4",# my Light Blue
                                                    "#ffd800",# my Yellow
                                                    "#6f7072",# my Grey
                                                    ])

x = np.linspace(1, 10, 1000)
for i in range(1, 6):
  y = np.sin(i*x) * i
  plt.plot(x,y)
 

Решение частично работает

Хотя я добиваюсь результатов с помощью цветового цикла по умолчанию, это не очень удобно, если я хочу построить график с одним из моих конкретных цветов, так как мне нужно сделать что-то подобное :

 y1_in_red = np.sin(2*x) * 2
y2_in_green = np.sin(3*x) * 3

my_Red = "#e0012e"    # <-it's not very convenient/clean to do that
my_Blue = "#80cd59" # <-it's not very convenient/clean to do that

plt.plot(x, y1_in_red, color=my_Red)
plt.plot(x, y2_in_green, color=my_Blue)
 

введите описание изображения здесь

Первая проблема с этим решением-это yticks, но я могу вернуть его в нормальное состояние. Вторая проблема в том, что он не такой чистый/эффективный, как я хочу. Я хотел бы знать, есть ли способ изменить красный цвет по умолчанию (и другие цвета) matplotlib, чтобы я мог просто сделать что-то подобное, чтобы достичь того же результата, что и выше :

 y1_in_red = np.sin(2*x) * 2
y2_in_green = np.sin(3*x) * 3

# ...
# some code
# ...

plt.plot(x, y1_in_red, color='r')
plt.plot(x, y2_in_green, color='b')
 

Ответ №1:

Цвета взяты из словаря именованных цветов , к которым вы можете получить доступ matplotlib.colors.get_named_colors_mapping() , поэтому, например, вы можете заменить r и b на красный и синий

 from matplotlib.colors import get_named_colors_mapping
get_named_colors_mapping()["r"] = "#e0012e"
get_named_colors_mapping()["b"] = "#013c9b"
 

Затем вы можете использовать их, как обычно

 import matplotlib.pyplot as plt 
plt.plot([1, 2, 3], [1, 2, 3], "r")  # will use your red