Определить цвет палитры на основе диапазона значений z из файла данных

Предположим, у меня есть файл данных со столбцом x y z, который выглядит так:

  -3.063052922487259      -3.141592741012573       401.3000000000000    
  -3.063052922487259      -3.063052922487259       1.290000000000000    
  -3.063052922487259      -2.984513103961945       0.920000000000000       

  -2.984513103961945      -3.141592741012573       0.100000000000000    
  -2.984513103961945      -3.063052922487259       10.80000000000000    
  -2.984513103961945      -2.984513103961945       1001.290000000000       

  -2.905973285436630      -2.984513103961945       514.4000000000000    
  -2.905973285436630      -2.905973285436630       131.0300000000000    
  -2.905973285436630      -2.827433466911316       129.3300000000000

Диапазон значений в столбце z будет определять цвет точек данных. Например, в столбце z, если значение находится в диапазоне от 0,0 до 0,3, цвет точек данных будет установлен как синий; если между 0,3 и 1, цвет точек данных будет установлен как оранжевый; если между 400 и 1000, цвет точек данных будет установлен как темно-синий.

Поэтому я пишу такой код:

set xrange [0:15]
set yrange [0:-15]
set zrange [0:1400]
set cbrange [0.001:1400]
set palette defined ( 0 "goldenrod", 0.3 "blue", 1 "orange", 2 "cyan", 4 "yellow", 10 "green", 20 "pink", 50 'gold', 100 'purple', 400 'navy', 1000 "red")
set palette maxcolors 11
unset key
unset surface
splot "DATA.dat" using 1:2:3 with image

Что не работает. Любая помощь?

Дальнейшее обновление: я действительно хочу объяснить яснее, почему не работает, но Stack Overflow не позволяет мне более подробно объяснить, потому что они требуют, чтобы у меня было 10 очков репутации, чтобы опубликовать результат изображения. Поэтому я не могу опубликовать свой результат из-за отсутствия репутации. Но я изменил свой набор данных, чтобы вы могли видеть, что xy-данные теперь равноудалены.

Поэтому я просто описываю проблему словами, а не изображением, а именно, что цветовая палитра неверна. Согласно моему кодексу, от 400 до 1000 должны быть темно-синие (всего один цвет). Но цветная рамка на изображении показывает, что между 400 и 1000 есть 5 различных темно-синих цветов, от неглубокого темно-синего до глубокого темно-синего. Как я могу иметь только один темно-синий цвет между 400 и 1000, пожалуйста?


person pig    schedule 29.10.2014    source источник
comment
Прежде всего: что значит не работает? И gnuplot обычно также выдает сообщение об ошибке, которое помогает понять (или просто локализовать) проблему. Одна проблема, которую я вижу, заключается в том, что ваши xy-данные НЕ находятся на равноудаленной сетке, как это необходимо для режима image.   -  person sweber    schedule 29.10.2014
comment
Почему мой следующий комментарий удаляется другими людьми БЕЗ уведомления? Привет субер. Я изо всех сил старался обновить свой вопрос. Спасибо!   -  person pig    schedule 30.10.2014


Ответы (1)


Параметр maxcolors не работает должным образом в вашем случае, потому что он дискретизирует только базовый цветовой градиент. Вы можете использовать команду test palette, чтобы увидеть, как выглядит ваша реальная палитра:

set palette defined ( 0 "goldenrod", 0.3 "blue", 1 "orange", 2 "cyan", 4 "yellow", 10 "green", 20 "pink", 50 'gold', 100 'purple', 400 'navy', 1000 "red")
set palette maxcolors 11
test palette

Неверное определение палитры

Вы также должны иметь в виду, что числа, используемые в определении палитры, не являются абсолютными значениями по оси cb, но значения (в вашем случае от 0 до 1000) сопоставляются с фактическим cbrrange (от 0,001 до 1400).

Чтобы получить области с постоянным значением цвета, вы делаете следующее:

set palette defined (0 "goldenrod", \
                     0 "blue", 0.3 "blue", \
                     0.3 "orange", 1 "orange", \
                     1 "cyan", 2 "cyan", \
                     2 "yellow", 4 "yellow", \
                     4 "green", 10 "green", \
                     10 "pink", 20 "pink", \
                     20 "gold", 50 "gold", \
                     50 "purple", 400 "purple", \
                     400 "navy", 1000 "navy", \
                     1000 "red", 1400 "red")
test palette

Правильное определение палитры

person Christoph    schedule 30.10.2014
comment
Благодарю вас! Оно работает! Я не могу проголосовать +1 за ваш ответ, так как для голосования требуется 15 очков репутации. - person pig; 31.10.2014