How to scale values in y-axis to be 1-100%?

30 views (last 30 days)
The code below is what I have tried to do. I want to scale the value 200 to become 100% in the plot and the value 100 to become 50%. The x and y values are just made up, I actually need to plot 1440 different values. Help needed! Thanks in advance!
clear
x = [1, 2, 3, 4, 5, 6, 7, 8, 9];
y = [5, 50, 200, 180, 100, 60, 53, 0, 2];
figure
ax = axes;
plot(x,y);
set(ax, 'YTick', [0:10:100], 'YLim', [0, max(y)]);
ytickformat(ax, 'percentage');
ax.YGrid = 'on';
xlabel('Time (Minutes)');
ylabel('Energy Percentage');

Accepted Answer

Mehmed Saad
Mehmed Saad on 7 May 2020
Edited: Mehmed Saad on 7 May 2020
clear
x = [1, 2, 3, 4, 5, 6, 7, 8, 9];
y = [5, 50, 200, 180, 100, 60, 53, 0, 2];
figure
ax = axes;
plot(x,y);
set(ax, 'YTick', [0:10:100], 'YLim', [0, max(y)]);
ytickformat(ax, 'percentage');
Save the yticklabels to a variable as it might be difficult for you to create them
ylbs = ax.YTickLabel;
Set yticks to 0:20:200
ax.YTick = 0:20:200;
and label them from 0 to 100
ax.YTickLabel = ylbs;
ax.YGrid = 'on';
xlabel('Time (Minutes)');
ylabel('Energy Percentage');
Or other way of generating tick label by yourself is
generate number from 0 to 100, convert it to string, split it to cell and add a percentage sign using strcat,
clear
x = [1, 2, 3, 4, 5, 6, 7, 8, 9];
y = [5, 50, 200, 180, 100, 60, 53, 0, 2];
figure
ax = axes;
plot(x,y);
set(ax, 'YTick', 0:20:200,...
'YTickLabel',strcat(split(num2str(0:10:100)),'%'),...
'YLim', [0, max(y)]);
ax.YGrid = 'on';
xlabel('Time (Minutes)');
ylabel('Energy Percentage');
  8 Comments
Manish
Manish on 16 Oct 2024
How to plot multiple variables with different range of values with same X axis on a single plot with Y axis as percentage?
DGM
DGM on 16 Oct 2024
If they all have a different range of values, then what does "percentage" mean? Percentage of what? If I have two y-data vectors:
y1 = [123 467 783];
y2 = [72 93 21];
What are these in %? In other words, what is the normalizing value? Do both y1 and y2 use the same normalizing value?

Sign in to comment.

More Answers (1)

Steven Lord
Steven Lord on 16 Oct 2024
Use normalize to normalize your data to the range [0, 100].
x = [1, 2, 3, 4, 5, 6, 7, 8, 9];
y = [5, 50, 200, 180, 100, 60, 53, 0, 2];
yn = normalize(y, "Range", [0 100]);
plot(x, yn);
yticks(0:10:100)
ytickformat('percentage');
xlabel('Time (Minutes)');
ylabel('Energy Percentage');

Categories

Find more on Axes Appearance in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!