How to take average for each bin and then plot it?
24 ビュー (過去 30 日間)
古いコメントを表示
Hello everyone,
I am trying to bin and then plot the binned data. My data is radius = 19125x1 double and temperature is 19125x1 double. I want to bin radius according to temperature and also calculate the average radius for each temperature bin.
I used below line of code for this purpose:
[N, temp] = histcounts(rad);
N =
Columns 1 through 11
5 73 295 656 1033 982 932 812 671 489 518
Columns 12 through 22
461 384 262 300 302 227 191 205 185 149 137
Columns 23 through 28
181 142 97 47 30 18
temp =
Columns 1 through 22
4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46
Columns 23 through 29
48 50 52 54 56 58 60
I want figure like this, where on X-Axis radius is plotted and temperature is plotted on Y-axis.
Any help is highly appreciated. Thank you
2 件のコメント
回答 (1 件)
Scott MacKenzie
2021 年 6 月 25 日
Here's what I put together. Looks like most of the 19124 data points have NaN for either temperature or data. There are 6901 points with a valid temperature and radius measurement. The first plot is your average radius for each temperature bin graph. I don't think you're going to get anything close to the tempearture vs. radius plot example in your question. In the scatter plot, you can see a genearal lack of trend between these two variables. The temperatures are all negative, but I suppose you're aware of that. Anyway, hope this helps. Good luck.
f = 'https://www.mathworks.com/matlabcentral/answers/uploaded_files/665795/Data_temp_radius.xlsx';
M = readmatrix(f);
temp = M(:,1); % y-axis data
rad = M(:,2); % x-axis data
% number of data points with temperature *and* radius measurement
nData = sum(~isnan(temp) & ~isnan(rad))
tiledlayout(2,1);
% plot mean radius by temperature bin
nexttile;
[~, edges] = histcounts(temp);
y = discretize(temp, edges);
m = grpstats(rad, y);
bar(edges(1:end-1), m);
set(gca, 'xtick', edges(1:end-1));
xlabel('Temperature');
ylabel('Mean Radius');
% radius vs. temperature scatter plot
nexttile;
scatter(rad, temp, '.')
xlabel('Radius');
ylabel('Temperature');
1 件のコメント
dpb
2021 年 6 月 25 日
I was just ready to paste in the same conclusion -- with the comment of "you can't always have what you want!" :)
These data will not come close to producing anything at all like the associated figure; there's essentially no correlation between the temperature and the radius measurements -- and it weren't for the discrete nature of the temperature measurement there would be no pattern whatsoever in the scatter plot -- as it is, all one sees is the spacing between the measurement levels.
参考
カテゴリ
Help Center および File Exchange で Scatter Plots についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!