gnuplot: почему ширина линии 0 не равна нулю? - PullRequest
2 голосов
/ 08 мая 2020

В чем причина того, что lw 0 не имеет нулевой ширины линии, т.е. невидим?

Что я нашел в руководстве по gnuplot:

Ширина линии и размер точки являются множителями для ширины текущего терминала по умолчанию ...

Хорошо, если lw 0 - множитель, то результирующая ширина линии должна быть равна нулю независимо от ширины линии терминала по умолчанию.

Причина запроса заключается в том, чтобы в конечном итоге иметь возможность использовать with linespoints и программно переключаться в al oop между with lines и with points.

Код:

### linewidth 0 isn't zero
reset session

set key out
set yrange[-0.9:10.9]
set ytics 1

plot for [i=0:10] i with lines lw i title sprintf("linewidth %g",i)

### end of code

Результат:

enter image description here

Кстати, какие артефакты на оси Y например, на ytics 3 , 4,6,7,9,10 (wxt-терминал)?

Ответы [ 2 ]

3 голосов
/ 09 мая 2020

Майк Накис прав в том, что по крайней мере для некоторых выходных терминалов gnuplot, включая PostScript, gnuplot запрашивает линию шириной 0, а соответствующий язык или библиотека интерпретирует это как «1 пиксель» или «самую тонкую из возможных линий».

Точно так же "pointtype 0" на самом деле не отсутствует, он производит одну точку в пикселях.

Однако вы можете полностью отключить рисование линии, используя тип линии "nodraw". Это дает дополнительную пару команд

plot sin(x) with linespoints lt nodraw pt 7         # only the points are visible
plot sin(x) with linespoints lt 1 pt 0              # only the lines are visible

В некоторых случаях может быть полезно знать, что эквивалент numeri c для lt nodraw равен lt -2.

3 голосов
/ 08 мая 2020

Я не знаю наверняка, каково официальное объяснение конкретно для gnuplot, но, по моему опыту, большинство графических пакетов / инструментов / библиотек и т. Д. c. используйте специальное соглашение для нулевой ширины линии.

Согласно этому соглашению, нулевая ширина линии не означает невидимость; это просто означает «максимально тонкая линия». Это означает самую тонкую линию, которая может быть отображена на устройстве, независимо от масштабирования, преобразований, сопоставления логических и физических и т. Д. c.

Итак, на мониторах это будет линия, которая пиксель шириной.

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

И обратите внимание, что «независимо от масштабирования, et c . " означает, что даже если вы настроите какое-то масштабирование, при котором ваша 10-точечная линия будет выглядеть толщиной в 100 пикселей, линия с нулевой шириной все равно будет иметь толщину ровно один пиксель.

...