2012-04-11 4 views
3

Как установить размер точки в gnuplot в единицах координат участка?Gnuplot: единицы измерения точки

Другими словами, точки должны уменьшаться, если я увеличиваю xrange.

Похоже, что все зависит от терминала. Есть ли обходной путь?

ответ

3

Вот небольшой пример использования встроенных данных ...

plot '-' u 1:2:1 ps variable 
    1 2 
    2 3 
    3 4 
    4 5 
    5 6 
    e 

Обратите внимание, что в то время как можно изменить pointsize с использованием колонки из вашего файла данных, я не знаю ни одного способа определить, как большой друг точка должна быть, поскольку pointize (и даже pointtype) является терминальной зависимой величиной. Единственным обходным решением, которое я могу придумать, является масштабирование точек по зависимому от терминала значению.

default_value=1.0 
func(x)=1.0*x #Change this to change the functional dependence of the pointsize on x. 
scale_point(x)=(GPVAL_TERM=="postscript") ? 1.0*func(x) :\ 
       (GPVAL_TERM=="png") ?  2.0*(x) :\ 
       default_value 
plot "mydata.dat" u 1:2:(scale_point($1)) w pt ps variable 

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

EDIT

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

EDIT 2

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

set style fill transparent solid noborder #whatever fillstyle you want... 
plot 'mydata' u 1:2:3 w circles 

см help circles ... Я не уверен, когда эта функция была введена, вероятно, с Gnuplot 4.3, но если вы используете 4.2, то дайте ему попробовать и дайте мне знать, как она идет ...

+0

Это не ответ на то, о чем я просил. Я знаю, как сделать переменную размер точки. Я не знаю, как указать размер в системе координат, которую gnuplot называет «первым». – hanno

+0

Я знаю. Я говорю, что я не верю, что этот вариант существует, поскольку вы заявляете «все это зависит от терминалов». Я попытался предоставить уродливый взломать, чтобы вы могли модифицировать его на основе заговора с минимальным вмешательством - с учетом разных терминалов и т. Д. – mgilson

+0

@hanno, по-видимому, я говорил слишком рано, и это возможно (по крайней мере, если вы хотите ваши точки появятся в виде кругов). Посмотрите мое второе обновление. – mgilson

0

Если я правильно понял вопрос, вы просто хотите, чтобы pointize был уменьшающейся функцией xrange. Точно, как большие точки печатаются и как они выглядят, зависит от терминала. Но нетрудно получить основное поведение, которое вы хотите.

Во-первых, определите функцию, чтобы вернуть размер. Давайте попробуем

sps(a,b) = 1./(b-a) 

Установите xrange:

set xrange [0:3] 

сделать сюжет, который вы не будете использовать:

plot sin(X) 

Мы сделали, что для того, чтобы получить некоторые из специальных переменных GNUPLOT, определенный ,Теперь мы можем сделать

plot sin(x) with points pt 7 ps sps(GPVAL_X_MIN, GPVAL_X_MAX) 

Если теперь сбросить xrange и повторного ввода команд как сюжет, вы увидите, что изменения pointsize, обратно пропорциональные xrange. Вероятно, вам нужна другая функция для pointize, чем пример «sps», который я использовал. Надеюсь, это похоже на то, что вам нужно.

+0

для создания участков, которые вы не будете использовать, могу ли я предложить «неизвестный» терминал? Я предполагаю, что это целая цель. Тем не менее, я уверен, что автор вопроса хочет получить прекрасный контроль над pointize. – mgilson

Смежные вопросы