Я считаю, что это проблема с устройством вывода Gnuplot windows
. Сравните это с устройством wxt
:
Gnuplot 4.4.3, WinXP
# Gnuplot, wxWidgets terminal
set terminal wxt size 200,400
set size ratio -1 # set size square
plot x
# Gnuplot, Windows terminal
set terminal windows size 200,400
set size ratio -1 # set size square
plot x
Обратите внимание, что для "win-терминала" размер влияет на размер фигуры, включая строку заголовка окна и строку состояния, тогда как для "wx-терминала" он устанавливает только внутреннюю область рисования
Октава 3.4.2, WinXP
К сожалению, когда я попробовал это в Octave , это все равно было не то, что должно быть для обоих типов терминалов. На самом деле, проблема в том, что изменение размера с помощью set(gcf,'position',[..])
не имело никакого эффекта:
# Octave, backend=Gnuplot, terminal=wxt/windows
graphics_toolkit gnuplot # backend gnuplot
setenv('GNUTERM','wx') # wx/windows
figure, set(gcf,'position',[100 100 200 400])
plot(-10:10, -10:10, 'r'), legend('x')
axis([-10 10 -10 10])
axis equal # axis square
Поэтому мне пришлось вручную изменять размеры фигур с помощью мыши до указанного размера (200,400)
(да, я фактически вытянул виртуальную линейку и измерил пиксели!). Наконец, вызовите команду refresh
для повторного планирования:
Хорошей новостью является то, что после правильной установки размера фигуры axis equal
работает для обоих типов терминалов.
С другой стороны, новый бэкэнд FLTK работает правильно, без каких-либо взломов, поэтому вы можете переключиться на него:
# Octave, backend=FLTK
graphics_toolkit fltk # backend fltk
figure, set(gcf,'position',[100 100 200 400])
plot(-10:10, -10:10, 'r'), legend('x')
axis([-10 10 -10 10])
axis equal
MATLAB
Для справки вот вывод MATLAB:
%# MATLAB
figure, set(gcf,'position',[100 100 200 400])
plot(-10:10, -10:10, 'r'), legend('x')
axis equal
axis([-10 10 -10 10])