Как изменить цвет нескольких линий со значениями, соответствующими цвету градиента?

У меня есть тысячи строк, и каждая из них со значением от 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()

Я думаю, что документация достаточно ясна matplotlib.org/users/colors.html Вы можете указать кортеж значений RGB

ChatterOne 09.04.2019 10:06

@ChatterOne Мне было очень трудно это понять. Можете ли вы объяснить мне немного больше. Я надеюсь, что выберу два цвета, скажем, «r» и «b», я хочу, чтобы «r» соответствовало значению 1, а «b» — 0, как я могу присвоить всем другим значениям строки средний цвет?

Ivy Gao 09.04.2019 10:10

Если вы хотите понять себя, вместо того, чтобы иметь готовое решение, попробуйте шаг за шагом, начните с: ax.plot(x, t, color=(b_range[j], 0, 0))

ChatterOne 09.04.2019 10:12

@ChatterOne Это круто. А как насчет того, чтобы выбрать цвет между «# 377eb8», «желтый», «# e41a1c»? есть ли какие-нибудь способы изменить цвет = (b_range [j], 0, 0)) чтобы сделать соответствующий цвет в середине?

Ivy Gao 09.04.2019 10:16

Если у вас более ~10 строк, LineCollection будет намного быстрее.

ImportanceOfBeingErnest 09.04.2019 12:47
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
3
5
4 678
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете изменить его самостоятельно, с помощью переменной 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'], который похож на синий, желтый и красный. Но как я могу это изменить?

Ivy Gao 09.04.2019 11:23

@IvyGao отредактировал мой ответ, проверьте его, пожалуйста.

gmds 09.04.2019 12:07

Еще небольшой вопрос. почему я поставил значение 0 и 1, цвет тот же. И как я могу обнаружить, что цвет меняется ['#377eb8','yellow','#e41a1c']? Спасибо.

Ivy Gao 09.04.2019 12:24

Я нашел это "cmap = colors.LinearSegmentedColormap.from_list('mycmap', ['#377eb8','yellow','#e41a1c'])".. но проблема c=cmap(0.0) и c= cmap(1.0) по-прежнему имеет тот же цвет, который должен быть от синего до красного. В чем причина?

Ivy Gao 09.04.2019 12:28
0 и 1 отличаются от 0.0 и 1.0. Вы можете использовать 0 для 255 или 0.0 для 1.0.
gmds 09.04.2019 12:51

Другие вопросы по теме