a little bug in function "plot/stem"

2 visualizzazioni (ultimi 30 giorni)
weibo li
weibo li il 9 Giu 2023
Spostato: VBBV il 21 Giu 2023
when you run code:
a = ones(1179080,1);
stem(a)
as shown in figure,you will find the x axis is constant at the end of data.
why?
  7 Commenti
Adam Danz
Adam Danz il 9 Giu 2023
Spostato: VBBV il 21 Giu 2023
@VBBV, OP is referring to the x values shown in the data tips.
VBBV
VBBV il 9 Giu 2023
Modificato: VBBV il 9 Giu 2023
It seems the DataTip property uses constant (same) values for every 5 units on X scale. E.g demonstration is shown below. When i use values between 1179070 & 1179075 it shows 1179070 but when i change values between 1179076 & 1179080 it displays 1179080. This is inline with that given in documentation page That means it creates a datatip at the nearest data point and perhaps the default property of datatip for plots in Matlab.
datatip(target,x,y) creates a data tip on the 2-D plotted data point specified by x and y. If you specify approximate coordinates, then datatip creates a data tip at the nearest data point.
v = 1179080;
a = ones(v,1);
s = stem(a);
xlim(v-[10,0])
ylim([0.9,1.1])
%
d = datatip(s,1179071,1);
d.X % Confirms correct placement
ans = 1179071
datatip(s,1179073,1);
datatip(s,1179076,1);
datatip(s,1179080,1);

Accedi per commentare.

Risposta accettata

Adam Danz
Adam Danz il 9 Giu 2023
Modificato: Adam Danz il 15 Giu 2023
Reproduce the problem
v = 1179080;
a = ones(v,1);
s = stem(a);
xlim(v-[10,0])
ylim([0.9,1.1])
d = datatip(s,1179071,1);
d.X % Confirms correct placement
ans = 1179071
datatip(s,1179074,1);
datatip(s,1179077,1);
Cause
By default, the datatip format uses a compact floating point format %g. When converted to string,
str2double(sprintf('%g',1179072))
ans
= 1179070
Solution
If you know the data should display as signed integers, specify the format of the DataTipTemplate using dataTipTextRow.
figure()
s = stem(a);
xlim(v-[10,0])
ylim([0.9,1.1])
row = dataTipTextRow('X',1:numel(a),'%d');
s.DataTipTemplate.DataTipRows(1) = row;
datatip(s,1179071,1);
datatip(s,1179074,1);
datatip(s,1179077,1);

Più risposte (0)

Categorie

Scopri di più su Visual Exploration in Help Center e File Exchange

Tag

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by