Линейный график с цветовым градиентом

Есть ли способ создать график в IDL с цветовым градиентом? То, что я ищу, похоже на этот вопрос Matlab. Лучшее, что я знаю, это отображать каждый сегмент линии в цикле for, но это кажется довольно громоздким:

x = float(indgen(11) - 5)
y = x ^ 2

loadct, 2, /silent
!p.background = 255
plot, x, y
for i = 0, 9 do begin
   oplot, x(i:i+1), y(i:i+1), color = i * 20, thick = 4
endfor

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

Я использую IDL 8.2, если это имеет значение.


person DavidH    schedule 13.02.2018    source источник


Ответы (2)


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

Вектор индексов в таблице цветов для цвета каждой вершины (точка данных графика). В качестве альтернативы массив 3xN байтов, содержащий значения цвета вершин. Если предоставленные значения не имеют типа byte, они масштабируются до диапазона байтов с помощью BYTSCL. Если индексы предоставлены, но цвета не предоставлены со свойством RGB_TABLE, используется шкала оттенков серого по умолчанию. Если предоставляется массив цветов 3xN, цвета используются напрямую, а значения цветов, предоставленные с помощью RGB_TABLE, игнорируются. Если количество указанных индексов или цветов меньше количества вершин, цвета повторяются циклически.

Это изменило бы внешний вид более дискретно, но, возможно, это поможет вам.

person sequoia    schedule 14.02.2018
comment
Это именно то, что мне нужно. Раньше я избегал использования функции построения графика в пользу подпрограммы, но это работает отлично: colors = indgen(11) * 20 и p = plot(x, y, rgb_table = 2, vert_colors = colors. - person DavidH; 14.02.2018
comment
По крайней мере, в моем случае мне не обязательно нужен плавный градиент, потому что у меня так много точек для построения, поэтому эта ступенька подходит. - person DavidH; 14.02.2018

У меня есть подпрограмма MG_PLOTS, которая может выполнять это в прямой графике:

IDL> plot, x, y, /nodata, color=0, background=255
IDL> mg_plots, x, y, color=indgen(10) * 20, thick=4

Конечно, это всего лишь оболочка для того, что вы делаете вручную.

Разноцветная линия

person mgalloy    schedule 14.02.2018