У меня есть тысячи строк, и каждая из них со значением от 0 до 1 связана с функцией. Что я хочу сделать, так это нарисовать эти линии и в то же время показать их особенность цветом. То есть, если значение строки равно 0,5, то я хочу, чтобы эта строка имела средний цвет цветной полосы. Как я могу построить этот код? Ниже приведен пример.
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure(figsize=(5, 5))
ax = fig.add_subplot(111)
x = np.linspace(0, 1, 100)
b_range=np.linspace(0, 1, 5)
for j in range(len(b_range)):
b=b_range[j]
t=b+(1-b)*(1-x)/(1-0)
ax.plot(x, t,color = "red")
plt.show()
@ChatterOne Мне было очень трудно это понять. Можете ли вы объяснить мне немного больше. Я надеюсь, что выберу два цвета, скажем, «r» и «b», я хочу, чтобы «r» соответствовало значению 1, а «b» — 0, как я могу присвоить всем другим значениям строки средний цвет?
Если вы хотите понять себя, вместо того, чтобы иметь готовое решение, попробуйте шаг за шагом, начните с: ax.plot(x, t, color=(b_range[j], 0, 0))
@ChatterOne Это круто. А как насчет того, чтобы выбрать цвет между «# 377eb8», «желтый», «# e41a1c»? есть ли какие-нибудь способы изменить цвет = (b_range [j], 0, 0)) чтобы сделать соответствующий цвет в середине?
Если у вас более ~10 строк, LineCollection
будет намного быстрее.
Вы можете изменить его самостоятельно, с помощью переменной Color, определяющей, какой цвет будет следующим.
это пример
import numpy as np
import matplotlib.pyplot as plt
def format_axes(ax):
ax.margins(0.2)
ax.set_axis_off()
points = np.ones(5) # Draw 5 points for each line
text_style = dict(horizontalalignment='right', verticalalignment='center',
fontsize=12, fontdict = {'family': 'monospace'})
COLOR = (0, 0, 0.1)
def color_conv(color_range):
return (COLOR[0] + color_range, COLOR[1], COLOR[2])
# Plot all line styles.
fig, ax = plt.subplots()
for color_ite in range(10):
ax.text(-0.1, color_ite, '-', **text_style)
ax.plot(color_ite * points, color=color_conv(color_ite/10), linewidth=3)
format_axes(ax)
ax.set_title('line styles')
plt.show()
Выход:
Используйте цветовые карты в cmap
:
import numpy as np
from matplotlib import pyplot as plt
from matplotlib import colors
fig, ax = plt.subplots(figsize=(6, 6))
cdict = {'red': ((0.0, 0.22, 0.0),
(0.5, 1.0, 1.0),
(1.0, 0.89, 1.0)),
'green': ((0.0, 0.49, 0.0),
(0.5, 1.0, 1.0),
(1.0, 0.12, 1.0)),
'blue': ((0.0, 0.72, 0.0),
(0.5, 0.0, 0.0),
(1.0, 0.11, 1.0))}
cmap = colors.LinearSegmentedColormap('custom', cdict)
for i in np.linspace(0, 1):
# Plot 50 lines, from y = 0 to y = 1, taking a corresponding value from the cmap
ax.plot([-1, 1], [i, i], c=cmap(i))
Полный список цветовых карт доступен здесь.
Спасибо это именно то, что мне нужно. Кроме того, могу ли я лично изменить цвет «плазмы» в cm.get_cmap? Я хотел бы выбрать градиент цвета в списке ['# 377eb8', 'желтый', '# e41a1c'], который похож на синий, желтый и красный. Но как я могу это изменить?
@IvyGao отредактировал мой ответ, проверьте его, пожалуйста.
Еще небольшой вопрос. почему я поставил значение 0 и 1, цвет тот же. И как я могу обнаружить, что цвет меняется ['#377eb8','yellow','#e41a1c']? Спасибо.
Я нашел это "cmap = colors.LinearSegmentedColormap.from_list('mycmap', ['#377eb8','yellow','#e41a1c'])".. но проблема c=cmap(0.0) и c= cmap(1.0) по-прежнему имеет тот же цвет, который должен быть от синего до красного. В чем причина?
0
и 1
отличаются от 0.0
и 1.0
. Вы можете использовать 0
для 255
или 0.0
для 1.0
.
Я думаю, что документация достаточно ясна matplotlib.org/users/colors.html Вы можете указать кортеж значений RGB