Plot mean and standard deviations along with data on a bell curve
Mostra commenti meno recenti
I have columns of data, numbering approximately 120 rows. The data is 1 thru 5, representing survey data. I am working on analyzing the data columns. The column data also has some NaN. I can calculate the mean and standard deviations. However, I am attempting to plot the mean, standard deviations, along with the actual data on the bell curve. I found this code that at least plots the data. But I am not sure how to change the code to correctly represent my data on a bell curve. For instance, I don't think I need the randn function, given the amount of data I have. In short, I just want to plot my data, the mean, and standard deviations (to plus and minus 3 sigma) for all columns of data on the bell curve, similar to what this code produces.
x = .03*randn(10000,1)+.34;
[N,X] = hist(x,100);
hfig = figure;
bar(X,N)
hold on;
y = [0 1.2*max(N)];
center = mean(x);
std1 = std(x);
%center plot
plot([center center],y,'r-.')
%1 std
plot([center center]+std1,y,'g-.')
plot([center center]-std1,y,'g-.')
%2 std
plot([center center]+2*std1,y,'k-.')
plot([center center]-2*std1,y,'k-.')

10 Commenti
Quad
il 21 Mag 2020
Are you unhappy with the way that this plot has been created?
If you like the curve and the plot and just want to substitute your data for x. For example, setting x = data(: ,1) would assign the first column of the data to x.
Sunshine
il 22 Mag 2020
Les Beckham
il 22 Mag 2020
Are you wanting to plot a 'theoretical' bell curve to compare against the data? If so, your code that you posted doesn't have anything in it to add such a curve to the plot. Also, the plot in your last post doesn't match up with the plot that results from the code you posted.
The code that you posted generates a pretty good looking plot. Please explain what you don't like about it.
Sunshine
il 22 Mag 2020
Quad
il 22 Mag 2020
You mentioned you have NaN's in your data. What are the values you obtain for 'center' and 'std1' in your code? If you have NaN's in your data, center and std1 are probably NaN, and therefore won't be plotted. Try using nanmean and nanstd instead.
Image Analyst
il 22 Mag 2020
Well I think my code below (in the official "Answers" section, not up here in the "Comments" section) should work. Did you try it?
If you still need help, save your x in a .mat file:
save('answers.mat', 'x');
then upload with the paper clip icon.
Sunshine
il 4 Giu 2020
Image Analyst
il 5 Giu 2020
Not sure what you want, but it it anything like this:
s = load('personality_cols.mat')
personality_cols = s.personality_cols
meanP1 = mean(personality_cols.p1, 'omitnan')
stdP1w1 = std(personality_cols.p1, 'omitnan')
stdP1sig2 = std(personality_cols.p2, 'omitnan')
% No idea what these next two lines are for.
% x = [0 stdP1w1 meanP1 stdP1sig2];
% y = [0 1 2 3 4 5];
% Plot the data.
x = 1 : length(personality_cols.p1);
plot(x, personality_cols.p1, 'b.-', 'LineWidth', 2, 'MarkerSize', 30);
grid on;
% Put vertical line at the mean.
yline(meanP1, 'Color', 'r', 'LineWidth', 2);
% Put vertical line at the mean.
yline(meanP1 - stdP1w1, 'Color', 'm', 'LineWidth', 2);
yline(meanP1 + stdP1w1, 'Color', 'm', 'LineWidth', 2);
% No idea what these are for so I'll comment them out.
% xticks([0 stdP1w1 meanP1 stdP1sig2])
% xticklabels({'0','\sigma', 'mu','2\sigma'})

There is a red line at the mean and magenta lines at the mean plus or minus a standard deviation. But I did not understand a lot of your code.
Sunshine
il 19 Giu 2020
Image Analyst
il 19 Giu 2020
You can use the isnan() function along with sum() to compute the number of nans in a vector.
numNans = sum(isnan(yourVector));
percentNans = 100 * numNans / numel(yourVector);
Risposte (1)
Image Analyst
il 22 Mag 2020
Then if it's not normally distributed data, why do you want to fit a bell curve to it?
Did you try fitdist():
load hospital
x = hospital.Weight;
pd = fitdist(x,'Normal')
x_values = 50:1:250;
y = pdf(pd,x_values);
plot(x_values,y,'LineWidth',2)
1 Commento
Image Analyst
il 22 Mag 2020
Categorie
Scopri di più su Data Distribution Plots in Centro assistenza e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
