help on graph (w/o common matrix plotting built-in functions)
조회 수: 1 (최근 30일)
이전 댓글 표시
Dear all,
based on a matrix of zeros and ones, let's say 10 x 365 (10 years a 365 days), I would like to plot a '-' for a one and leave the position blank ' ' for a zero.
Thus, the graph should e.g. look like:
....
------ --- --- ---- ---- ------ ----- --
-------- ------ --------------- -----------
------ -- ---------- --------- ---------
----- --------------- ------ ---------- -
.....
Any hint appreciated.
댓글 수: 0
채택된 답변
Les Beckham
2022년 5월 20일
In that case, maybe something like this will get you close.
A = randi(2,10,365)-1;
x = 1:size(A,2);
y = size(A,1):-1:1;
for i = 1:size(A,1)
A(i,:) = A(i,:)*y(i);
end
A(A==0) = NaN;
for i = 1:size(A,1)
line(x, A(i,:), 'Marker', '_', 'linestyle', 'none', 'MarkerSize', 0.1)
end
댓글 수: 0
추가 답변 (5개)
Les Beckham
2022년 5월 20일
A = randi(2,10,365)-1
str = repmat(' ', size(A));
str(A==1) = '-';
disp(str)
댓글 수: 3
Les Beckham
2022년 5월 20일
How clever! I'm suprised that that works. I would have never thought to index into a 1x2 array with a larger index array.
Steven Lord
2022년 5월 21일
The size of the index array doesn't matter for linear indexing. What matters are the values in that array.
Patrick Laux
2022년 5월 20일
댓글 수: 1
Steven Lord
2022년 5월 21일
A = randi([0 1], 5, 5)
spy(A)
If you really want dashes:
figure
spy(A, '_')
DGM
2022년 5월 20일
편집: DGM
2022년 5월 20일
In the spirit of ridiculousness, here is my attempt:
% random binary data
data = randi([0 1],10,10)
data =
1 1 0 0 1 1 1 1 0 0
0 0 0 1 0 1 1 1 1 1
0 0 0 1 1 0 0 0 1 0
1 1 1 1 0 1 0 0 1 0
0 1 0 1 0 1 1 0 1 1
0 1 0 1 0 0 1 1 1 0
0 0 1 0 1 0 1 0 0 0
0 0 0 0 0 1 1 0 0 1
1 0 0 0 1 1 0 1 0 1
0 1 1 0 0 1 0 1 0 1
% convert to char data (space and full-width crossbar)
charmap = char([32 196]);
chardata = charmap(data+1)
chardata =
10×10 char array
'ÄÄ ÄÄÄÄ '
' Ä ÄÄÄÄÄ'
' ÄÄ Ä '
'ÄÄÄÄ Ä Ä '
' Ä Ä ÄÄ ÄÄ'
' Ä Ä ÄÄÄ '
' Ä Ä Ä '
' ÄÄ Ä'
'Ä ÄÄ Ä Ä'
' ÄÄ Ä Ä Ä'
% construct an image by flowing char glyphs into a rectangular box
charsize = [8 8]; % depends on the selected font
datasize = size(chardata);
tsize = [NaN datasize(2)*charsize(2)+charsize(2)/2];
outpict = textblock(chardata(:)',tsize,'font','compaq-8x8','tightwidth',true,'hardbreak',true);
% display the image with character-centered tickmarks
xrange = 0.5:datasize(1)+0.5;
yrange = 0.5:datasize(2)+0.5;
imagesc(xrange,yrange,1-outpict)
colormap(gray)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1005920/image.png)
Alternatively, instead of using a full crossbar, you can just use
charmap = ' -';
and get
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1005930/image.png)
Bear in mind those are different random data. The point is that the bars don't touch.
댓글 수: 0
참고 항목
카테고리
Help Center 및 File Exchange에서 Discrete Data Plots에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!