how to turn "points" in scatter diagram into "lines"
조회 수: 5 (최근 30일)
이전 댓글 표시
Dear all,
I have two sets of data for two clusters, respectively. These data sets (C_01.txt and C_02.txt) are attached. But define the first columns of these two data set as x1,x2,and the second columns as y1(all elements in y1 are 1),y2(all elements in y2 are 2),respectively, I can draw the attached figure by using
scatter(x1,y1); hold on; scatter(x2,y2);
However, I actually want a image like the following:
That is to say, I need to show each points in the scatter diagram as a vertical line with a certain hight.
Could that be possibly done in matlab?
댓글 수: 0
채택된 답변
Star Strider
2016년 8월 18일
This will get you started:
fidi1 = fopen('Yeping Sun C_01.txt','rt'); % Begin: Import & Define Data
fidi2 = fopen('Yeping Sun C_02.txt','rt');
x1y1 = textscan(fidi1, '%f%f', 'CollectOutput',1);
x2y2 = textscan(fidi2, '%f%f', 'CollectOutput',1);
fclose(fidi1);
fclose(fidi2);
x1 = x1y1{:}(:,1);
y1 = x1y1{:}(:,2);
x2 = x2y2{:}(:,1);
y2 = x2y2{:}(:,2); % End: Import & Define Data
hgt = 0.2; % Height Of Lines
figure(1)
plot([x1 x1]', [0 hgt]', '-b') % Plot ‘Cluster 1’
hold on
plot([x2 x2]', [hgt 2*hgt]', '-r') % Plot ‘Cluster 2’
plot([0 max(xlim)], hgt*ones(1,2), '-k', 'LineWidth',1.5) % Horizontal Line
plot([0 max(xlim)], 2*hgt*ones(1,2), '-k', 'LineWidth',1.5) % Horizontal Line
plot([1 1]*800, [0 hgt*2], '-k', 'LineWidth',1.5) % Vertical Line
hold off
axis([0 5500 0 2*hgt])
text(50, hgt*0.5, 'Cluster 1', 'Color','b', 'VerticalAlignment','middle', 'FontSize',8)
text(50, hgt*1.5, 'Cluster 2', 'Color','r', 'VerticalAlignment','middle', 'FontSize',8)
set(gca, 'YTick',[]) % Turn Off Y-Ticks
You will have to experiment with the axis limits to get it to look the way you want.
댓글 수: 0
추가 답변 (1개)
Robert
2016년 8월 18일
You could display the data as an image. I see that your x values are all integers in your text files. If this will always be true, you can use them as indices of your array.
img = 0; % initialize with a zero
img(1,x2) = 2; % fill top row (will expand img as needed)
img(2,x1) = 1; % fill bottom row (will expand img as needed)
imagesc(img) % display matrix as image
colormap([1,1,1;0,0,1;1,0,0]) % color zeros white, ones blue, and twos red
댓글 수: 2
Robert
2016년 8월 18일
You could leave them as integers and adjust the x axis tick labels after plotting.
참고 항목
카테고리
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!