GNUPLOT: используя splot с опцией палитры, воспроизводите плавные изменения цвета - PullRequest
0 голосов
/ 09 ноября 2019

Я создаю файл .txt, содержащий четыре столбца: координаты X, Y и Z, а также скалярную переменную. Первые три значения в каждой строке описывают унитарный вектор в 3D, с которым связано скалярное значение.

Я хотел бы представить результаты в виде цветной сферической поверхности. Я не могу с готовностью использовать pm3D, так как данные не в матричном формате, то есть, нет пробелов после переходов в координатах X. Более того, едва ли есть две одинаковые координаты X.

Лучшее, что я мог бы сделать, - это использовать splot с опцией палитры, которая, как я понимаю, будет использовать данные в 4-м столбце для назначения цветов для каждой точки.

Данные для печати сохраняются в «star.txt», простом текстовом файле с 4 столбцами и до 10.000 строк.

Сценарий Gnuplot выглядит так:

    set terminal wxt size 800,800
    set mapping cartesian
    set view equal xyz
    set xlabel 'x'
    set ylabel 'y'
    set zlabel 'z'
    splot "star.txt" palette pointtype 7
    pause -1

Было бы замечательно, если бы был способ получить плавные изменения цвета на поверхности. На данный момент нетрудно понять, где находится цветовая область. Кроме того, можно было видеть сквозь точки на поверхности, которая фактически дальше от зрителя.

Любое предложение будет высоко оценено. enter image description here

1 Ответ

1 голос
/ 10 ноября 2019

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

  set hidden3d

. точки на расстоянии от наблюдателя, так что точки на передней поверхности будут нарисованы в последнюю очередь и, следовательно, не будут закрыты точками с задней поверхности. Можно было бы сделать окраску полупрозрачной, чтобы вы могли «видеть сквозь» ее, но это делало бы различие спереди и сзади скорее трудным, чем легким.

Последующее наблюдение

Проблема не в интерполяции. Проблема в том, что вы строите точки, а каждая точка имеет какой-то один цвет. Непонятно, что именно вы хотите нарисовать в идеале. Идеальная сфера? Поверхность подходит к точкам, которые могут быть или не быть сферическими? Есть ли какая-либо функция окраски, которую вы применили к точкам, или сами точки определяют желаемый цвет?

1) Если вы спрашиваете, как нарисовать идеальную цветную сферу, см. Пример ответа на этот недавний вопрос: gnuplot: нанесение функции на поверхность сферы Поскольку вы спрашиваете конкретно об интерполяции, я отмечу, что цвет, показанный в этом ответе, будет более плавным, если вы увеличите уровеньинтерполяции:

  set pm3d interpolate 3,3    # your choice of values > 1

2) Если вы спрашиваете, как покрасить произвольную поверхность в соответствии с некоторой схемой, представленной значениями в известных точках, я думаю, что ответ заключается в том, что текущий стабильныйРелиз gnuplot (5.2) не может этого сделать, но версия разработки (5.3) может. См. Ответ на этот предыдущий вопрос Тепловая карта точек в объеме и, в частности, онлайн-демонстрацию http://gnuplot.sourceforge.net/demo_5.3/voxel.html.. Я воспроизвожу окончательный график этой демонстрации ниже. enter image description here

...