Вопрос по plot, matlab, label – Удаление научной нотации в метке тика сюжета Matlab

11

Я сделал сюжет в Matlab, используя:

<code>hold on
plot(t1,Dx1,'r')
xlabel('t (ps)')
ylabel('Deviation of coordinate from initial coordinate (Å)')
plot(t1,Dy1,'g')
plot(t1,Dz1,'b')
hold off
</code>

Однако метки на оси Y генерируются в научной нотации:

Scientific Notation on y-axis

Можно ли как-нибудь удалить научную нотацию и установить диапазон значений y от -0,0025 до 0,0005? Спасибо!

Ваш Ответ

5   ответов
9

используя sprintf:

yt = get(gca,'YTick');
set(gca,'YTickLabel', sprintf('%.4f|',yt))
:) - как раз тогда, когда мне позвонили!
Х в конце второй строки все еще неверен. Должен прочитать, я думаю.
Я нашел это ужасным обходным решением, потому что в случае, если вы изменили масштаб на экране и изменилось число тиков на осях, вы получите неправильные метки.
Ага, ты был всего на несколько секунд быстрее ... ;-). В любом случае вы должны заменить & quot; xtick & quot; и "xticklabel" "ytick" и "yticklabel". И х в конце второй строки должен читаться как xt.
1

Y. Этот код происходит от ticks_format.m.

% Установите предпочтительный формат тиков здесь.

y_formatstring = '%3.4f';

% Вот код.

ytick = get(gca, 'ytick');
for i = 1:length(ytick)
    yticklabel{i} = sprintf(y_formatstring, ytick(i));
end
set(gca, 'yticklabel', yticklabel)
2

set(gcf, 'renderer', 'zbuffer')
@ Андрей, я не знаю, как объяснить, но это действительно работает!
4

ax = gca;
ax.YAxis.Exponent = 0;

Вот пример:

x = 0:0.1:10;
y = 1000*x.^2;

%Plot with default notation:

subplot(1,2,1)
plot(x,y)


%Plot without exponent:

subplot(1,2,2)
plot(x,y)
ax = gca
ax.YAxis.Exponent = 0;
Я прочитал десятки ответов, и этот был лучшим !!! Спасибо @GHH!
4

чтобы оси моего графика отображались в фиксированном виде вместо научного. Самым неприятным для меня было то, что «x10 ^ 4» метка останется на краю поля графика даже после того, как я вручную переназначу метки галочек в фиксированную запись. Наконец, благодаря посту выше, я отследил проблему с рендером рисунка. Я использовал «OpenGL». Когда я изменил на «zbuffer» "x10 ^ 4"; метка будет правильно исчезать, когда я вручную сбрасываю метки галочек. Вот пример кода, который использует формат ###, ###. 0 & # x2019; к меткам оси y и даже динамически обновляет метки y при масштабировании / панорамировании и т. д. благодаря двум полезным функциям, которые я обнаружил в Matlab File Exchange. Место, где можно найти две другие функции, включено в качестве комментариев ниже пример функции.

function []=TickFixExample()

figure %this one works
myRenderer='zbuffer';
set(gcf,'Renderer', myRenderer); 
axesh = axes();
set(gca,'YLim',[20000 20100]);
title(myRenderer)
ticklabelformat(gca,'y','###,###.0');

figure %this one doesn’t work
myRenderer='OpenGL';
set(gcf,'Renderer', myRenderer); 
axesh = axes();
set(gca,'YLim',[20000 20100]);
title(myRenderer)
ticklabelformat(gca,'y','###,###.0');

Функция ticklabelformat (hAxes, axName, format) от Y. Altman находится по адресу: http://www.mathworks.com/matlabcentral/fileexchange/36254-ticklabelformat-set-a-dynamic-format-of-axes-tick-labels или путем поиска в Google 'ticklabelformat Matlab'; Я немного изменил его, изменив строку 105 следующим образом:

 tickLabels = arrayfun(@(x)(FormatNumberScalarInputStrOutput`(x,format)),tickValues,'UniformOutput',false);`

вместо версии Альтмана:

tickLabels = arrayfun(@(x)(sprintf(format,x)),tickValues,'UniformOutput',false);

это изменение обеспечивает функциональность разделителя запятыми тысячами функция y = NumberFormatter (Numbers, FormatPattern) по С. Линхарду, также на Matlab File Exchange. Моя модифицированная версия кода Lienhard дано в полном объеме ниже:

function y = FormatNumberScalarInputStrOutput(Number ,FormatPattern)

 % adapted 12-2012 by D. Bourgoyne from NUMBERFORMATTER by S. Lienhard
% 
%   The pound sign (#) denotes a digit, the comma is a placeholder for the
%   grouping separator, and the period is a placeholder for the decimal
%   separator.
%   The pattern specifies leading and trailing zeros, because the 0
%   character is used instead of the pound sign (#).
% 
%   Examples:
%   NumberFormatter(rand(5),'0.000')
%   NumberFormatter(rand(5)*100,'###,###.000') 
import java.text.*
v = DecimalFormat(FormatPattern);
y = char(v.format(Number));

Похожие вопросы