2013-11-23 2 views
4

Я пытаюсь воспроизвести стиль прилагаемой фигуры, используя средства matplotlib.Измените цвет кривой в соответствии с ее значением y в matplotlib

Curves whose colour change with height

В принципе, я хочу, чтобы изменить цвет кривой в соответствии с его гамма-значения, используя Matplotlib.

+0

Это не ясно, что задает цвет в вашем примере. Должно быть какое-то третье значение, потому что цвет явно не установлен значением 'c \ tau/R_0' или' kR_0'. – askewchan

+0

Дополнительную информацию см. В разделе [Цвет линии зависит от индекса данных для линейного графика в matplotlib?] (Http://stackoverflow.com/questions/13972287/having-line-color-vary-with-data-index-for- line-graph-in-matplotlib) – askewchan

ответ

7

Участок, который вы указали, не имеет цвета, заданного вертикальной осью графика (это то, что я хотел бы рассмотреть y-value). Вместо этого он просто имеет 8 разных сюжетов, каждый с другим цветом, без указания того, что означает цвет.

Вот пример того, что выглядит как ваш сюжет:

import numpy as np 
import matplotlib.pyplot as plt 
from matplotlib import cm 

# some fake data: 
x = np.linspace(0, 2*np.pi, 1000) 
fs = np.arange(1, 5.) 
ys = np.sin(x*fs[:, None]) 

for y, f in zip(ys, fs): 
    plt.plot(x, y, lw=3, c=cm.hot(f/5)) 

colors

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

x = np.linspace(0, 2*np.pi, 1000) 
y = np.sin(2*x) 
plt.scatter(x,y, c=cm.hot(np.abs(y)), edgecolor='none') 

Примечания:

  • вектор цвет должен находиться в диапазоне между 0 и 1, так что если y.max() > 1, а затем нормализуют им: c=cm.hot(y/y.max()) и убедитесь, что все положительные.
  • Я использовал edgecolor='none', потому что по умолчанию маркеры scatter имеют черный контур, что делает его менее похожим на однородную линию.
  • Если ваши данные расположены слишком далеко, вам нужно будет интерполировать данные, если вам не нужны промежутки между маркерами.

more colors

+1

Вы правы. Однако, забыв о сюжете, есть ли у вас представление о том, как изменить цвет линии в соответствии с положением на вертикальной оси? –

+0

В matplotlib один объект линии не может иметь более одного цвета. Лучшее приближение к тому, что вы хотите, - это сделать график рассеяния, где цвет задается теми же значениями, что и массив y. Я скоро отредактирую свой ответ, чтобы привести пример. – askewchan