Как заставить ось y лежать на x=0?

Я хочу, чтобы х =0 было на оси у. Прямо сейчас это не работает. Я пытался сделать эту команду, но она не работает

set(gca, "yaxislocation", "zero")

Мой код

labels = [0 128 256 512 1024 2048]; % Provide your labels here
ylabels = [0 1 2 4 8 16 32]; % Provide your labels here

hold on;

% system1 durations in seconds

plot (3, 1 ,'o' ,"markersize", 12);
plot (4, 1, 'o' ,"markersize", 12);
plot (5, 30, 'o' ,"markersize", 12);
plot (6, 150, 'o' ,"markersize", 12);

% system2 durations in seconds

plot (3, 2 ,'x' ,"markersize", 12, "markerfacecolor", "auto");
plot (4, 2, 'x' ,"markersize", 12, "markerfacecolor", "auto");
plot (5, 10, 'x' ,"markersize", 12, "markerfacecolor", "auto");
plot (6, 30, 'x' ,"markersize", 12, "markerfacecolor", "auto");

% system3 durations in seconds

plot (3, 2 ,'d' ,"markersize", 12, "markerfacecolor", "auto");
plot (4, 7, 'd' ,"markersize", 12, "markerfacecolor", "auto");
plot (5, 18, 'd' ,"markersize", 12, "markerfacecolor", "auto");
plot (6, 22, 'd' ,"markersize", 12, "markerfacecolor", "auto");

%set(gca, 'xtick', x); % Change the x-axis so only the right amount of ticks remain
%set(gca, 'xticklabel', labels) % Change the labels to the desired ones
%set(gca, 'yticklabel', ylabels) % Change the labels to the desired ones
%set(gca, "xaxislocation", "zero")
set(gca, "yaxislocation", "zero")
%axis([0,1, miny, maxy]); axis "autox";

Я пытаюсь отобразить экспоненциальный масштаб по осям y и x, но это невозможно. Мой вывод заключается в том, что октава бесполезна, gnuplot тоже не работает, и что лучше рисовать график вручную. Ни matlab, ни октава не могут сделать такую ​​простую вещь, как экспоненциальная шкала, и они даже не могут поставить ноль там, где она принадлежит.

2 ответа

Решение

Это было добавлено с помощью набора изменений http://hg.savannah.gnu.org/hgweb/octave/rev/1ddb53b6ad30 и уже является частью выпуска GNU Octave 4.2.0.

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

Редактировать: я не совсем уверен, была ли поддержка OpenGL для (x/y) расположения осей уже частью 4.2.0. Я могу с уверенностью сказать, что он работает на текущих источниках разработки и что он работает на 4.2.0 с graphics_toolkit gnuplot

Я хочу, чтобы х =0 было на оси у.

Для меня это звучит так, будто вы пытаетесь начать сюжет с 0 по оси x. Итак, вы ищете функцию для установки пределов оси X.

xlim функция делает именно это, или вы можете использовать axis в более общем плане, чтобы одновременно установить границы осей x и y. Смотрите страницу документации по октаве на этом.

Например, чтобы ось X начиналась с 0 и доходила до 100:

xlim([0,100]);

Обратите внимание, что yaxislocation делает что-то совершенно другое. См. https://uk.mathworks.com/help/matlab/examples/controlling-axis-location.html?searchHighlight=yaxislocation&s_tid=doc_srchtitle

Если вместо этого вы пытаетесь сделать так, чтобы ось Y и ее метки всегда появлялись на линии x=0, даже если она находится в середине графика, в отличие, скажем, от фиксированной в левой части. или с правой стороны рисунка, затем следуйте инструкциям по этой ссылке. По существу:

set(gca, 'yaxislocation', 'origin');

(Примечание: значение "ноль" раньше было допустимым значением для этого параметра, но оно не рекомендуется в пользу значения "происхождение", которое делает то же самое).

Другие вопросы по тегам