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!