フィルターのクリア

how to do density plot?

57 ビュー (過去 30 日間)
sourabh mittal
sourabh mittal 2018 年 9 月 19 日
コメント済み: sourabh mittal 2018 年 9 月 20 日
suppose, I have a text file 'data.txt' that has three columns and contains output of below.
% code
fileID = fopen('data.txt','w');
for x = 0.1:0.1:10
for y = 0.1:0.1:10
z = x*y;
T = [x, y, z];
fprintf(fileID,'%f %f %f\n',T);
end
end
fclose(fileID);
Now i want to do the density plot of this data. Please help.
  4 件のコメント
Adam Danz
Adam Danz 2018 年 9 月 19 日
I continued in the answer section though I'm unsure about the plot you're describing.
sourabh mittal
sourabh mittal 2018 年 9 月 20 日
This is what i was searching for
% code
fileID = fopen('data.txt','r');
formatSpec = '%f';
A = fscanf(fileID,formatSpec);
x=A(1:3:end); y=A(2:3:end); z=A(3:3:end);
f=scatteredInterpolant(x,y,z);
[X,Y]=meshgrid(0.1:0.1:10,0.1:0.1:10);
Z=f(X,Y);
surf(X,Y,Z)
view(0,90)
colorbar
Thank you!

サインインしてコメントする。

採用された回答

Image Analyst
Image Analyst 2018 年 9 月 19 日
Try this vectorized approach with meshgrid():
% Generate the data.
xv = 0.1:0.1:10
yv = 0.1:0.1:10
[x, y] = meshgrid(xv, yv)
z = x .* y
T = [x(:), y(:), z(:)]
% Show the x,y,z data as a surface
surf(xv, yv, z, 'EdgeColor', 'none');
xlabel('x', 'FontSize', 20);
ylabel('y', 'FontSize', 20);
zlabel('z', 'FontSize', 20);
% Write the file.
filename = fullfile(pwd, 'data.txt');
fileID = fopen(filename, 'wt');
fprintf(fileID,'%f %f %f\n',T'); % Don't forget to transpose with '
fclose(fileID);
type(filename);
% delete(filename);
  3 件のコメント
Image Analyst
Image Analyst 2018 年 9 月 19 日
OK. I thought you were going to visualize the data in the same program that created it. But it looks like Adam alerted you to the function dlmread(). But you might still look at my vectorized way of using meshgrid() - it's a handy function that allows you to do in one line what would otherwise be a multi line set of nested for loops.
Anyway, after calling dlmread(), you can use surf() like I showed, or scatter() or imagesc() like Adam showed, or even histogram() or histogram2(), depending on what you mean by density. Still even now, no one has a clear idea of what you mean by that, other than your acceptances of Adam's answer which I guess means you wanted either scatter() or imagesc().
sourabh mittal
sourabh mittal 2018 年 9 月 20 日
Thanks my problem was solved by rotating surf by 90 degree.

サインインしてコメントする。

その他の回答 (1 件)

Adam Danz
Adam Danz 2018 年 9 月 19 日
編集済み: Adam Danz 2018 年 9 月 19 日
You can read the data back in with dmlread()
data = dlmread('data.txt', '%f');
' data' will be the [10000 x 3] matrix.
For the figure, I'm not sure if this is what you're looking for but you can try it.
figure;
imagesc(data(:,1), data(:,2), data(:,3));
colorbar
Another option
figure;
scatter(data(:,1), data(:,2), 10, data(:,3))
  1 件のコメント
Adam Danz
Adam Danz 2018 年 9 月 19 日
See comments under the answer provided by @ImageAnalyst for more interpretations of what you'd like to plot in 2D space.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeAnnotations についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by