Undefined unary operator '-' for input arguments of type 'string error

I am going to show x axis in scatter plot by text label like below with positive and negative signs however I get this error
"Undefined unary operator '-' for input arguments of type 'string' "
Can someone please assist in rectifying?
n= ["-240-260";"-220-240";"-200-220";"-180-200";"-160-180";"-140-160";"-120-140";"-100-120";"-80-100";"-60-80";"-40-60";"-20- 40";"0-20";"0+20";"+20+40";"+40+60";"+60+80";"+80+100";"+100+120";"+120+140";"+140+160";"+160+180";"+180+200";"+200+220";"+220+240"];
y1 = [0,0,0,0,0,0,0,0,0,0,0,0.04,0.32,0.56,0.08,0,0,0,0,0,0,0,0,0,0];
y2 = [0,0.05,0.05,0.05,0,0.1,0,0,0.2,0.3,0.1,0.1,0.05,0,0,0,0,0,0,0,0,0,0,0,0];
x=categorical(n);
plot(x,y1,'r--o', x,y2,'k--o');

5 comentarios

n= ["-240-260";-"220-240";"....
Look carefully at the second entry! I think you should have:
n= ["-240-260";"-220-240";"....
@Alan, you should probably move that to the answer section.
Yes you're right, thanks
but there is another problem, I don't see the x axis regularly, from "-260-240" to "+220+240".
Rik
Rik el 7 de Jul. de 2020
Editada: Rik el 7 de Jul. de 2020
You have told Matlab those strings are categories, so Matlab treated them as categories. Do you want to treat them as bins of a histogram instead?
Yes it is histogram. I am going to sort x axis from "-260-240" to "+220+240". I did x=sort (categorical(n)); but doesn't work. Please see attached photo.

Iniciar sesión para comentar.

 Respuesta aceptada

When you call categorical with one input, the list of categories in that categorical is the sorted unique values in the input. From the documentation page:
"B = categorical(A) creates a categorical array from the array A. The categories of B are the sorted unique values from A."
Call categorical with two inputs to keep the categories in your desired order.
"B = categorical(A,valueset) creates one category for each value in valueset. The categories of B are in the same order as the values of valueset"
x = categorical(n, n);
plot(x,y1,'r--o', x,y2,'k--o');

2 comentarios

it works, thanks a lot
Hi,
Could I ask another question about change origin point of y axis to (0-20)? I gonna shift Y axis to point (0-20) but I don't have any idea.
ax.XAxisLocation = 'origin';
ax.YAxisLocation = 'origin';
origin = (0-20);

Iniciar sesión para comentar.

Más respuestas (1)

Why not just:
y1 = [0,0,0,0,0,0,0,0,0,0,0,0.04,0.32,0.56,0.08,0,0,0,0,0,0,0,0,0,0];
y2 = [0,0.05,0.05,0.05,0,0.1,0,0,0.2,0.3,0.1,0.1,0.05,0,0,0,0,0,0,0,0,0,0,0,0];
x=-250:20:230;
plot(x,y1,'r--o', x,y2,'k--o');
This plots the "y" points in the middle of your "x" bands.

2 comentarios

Thanks for your help,
but please consider I have
x= ["-240-260";"-220-240";"-200-220";"-180-200";"-160-180";"-140-160";"-120-140";"-100-120";"-80-100";"-60-80";"-40-60";"-20- 40";"0-20";"0+20";"+20+40";"+40+60";"+60+80";"+80+100";"+100+120";"+120+140";"+140+160";"+160+180";"+180+200";"+200+220";"+220+240"];
not exactly x=-250:20:230;
Alan Stevens
Alan Stevens el 7 de Jul. de 2020
Editada: Alan Stevens el 7 de Jul. de 2020
Where does it differ?

Iniciar sesión para comentar.

Categorías

Etiquetas

Preguntada:

el 7 de Jul. de 2020

Comentada:

el 8 de Jul. de 2020

Community Treasure Hunt

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

Start Hunting!

Translated by