Non-uniform axis spacing in a plot
조회 수: 69 (최근 30일)
이전 댓글 표시
Hi all,
I have two vectors: A = [0.5,0.65,0.7,0.66,0.81] and B = [5,10,20,100,1000]
I would like to plot A on the y-axis and B on the x-axis, so that the x-axis has a UNIFORM spacing of the 5 elements in B. Instead, if I simply use plot(B,A) I obtain the usual Matlab plot, in which the point 5,10,20,100 are very close one to the other on the x-axis, while 1000 is very distant.
How can I make this plot, having uniform spacing between the distante values in B?
Thanks
댓글 수: 2
답변 (4개)
Steven Lord
2019년 2월 1일
편집: Steven Lord
2019년 2월 1일
About the only way you'll be able to get what you want is to lie a little bit.
A = [0.5,0.65,0.7,0.66,0.81];
B = [5,10,20,100,1000];
Plot the A data with X coordinates 1, 2, ... instead of the data in B. Don't worry, we'll use B soon.
plot(A);
Show only the ticks corresponding to those integer coordinates.
xticks(1:length(A));
Set the labels for those ticks to be the elements in B.
xticklabels(string(B))
댓글 수: 0
Star Strider
2019년 2월 1일
Try this:
x = 10.^(rand( 1, 20)*3); % Create Data
y = rand(1, 20); % Create Data
A = [0.5,0.65,0.7,0.66,0.81];
B = [5,10,20,100,1000];
figure
plot(x, y, 'p')
set(gca, 'XScale','log', 'XTick',B, 'XTickLabel',B, 'YTick',sort(A))
The x-axis spacing is not absolutely uniform, however this is as likely as close as it is possible to get to what you want.
댓글 수: 0
KSSV
2019년 2월 1일
편집: KSSV
2019년 2월 1일
Do interpolation....read about interp1
A = [0.5,0.65,0.7,0.66,0.81] ;
B = [5,10,20,100,1000] ;
plot(B,A,'*r')
hold on
Bi = linspace(min(B),max(B),100) ; % or you may use Bi = min(B):10:max(Bi)
Ai = interp1(B,A,Bi) ;
plot(Bi,Ai,'.-b')
Jianye Xu
2022년 8월 13일
Firstly, turn x-data to categorical data. Then, use plot():
A = [0.5,0.65,0.7,0.66,0.81];
B = [5,10,20,100,1000];
B_cat = categorical(B);
figure
plot(B_cat,A)
Hope that helps.
댓글 수: 0
참고 항목
카테고리
Help Center 및 File Exchange에서 Annotations에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!