Matlab cdfplot: comment contrôler l'espacement des marqueurs

j'ai un Matlab figure, que je veux utiliser un papier. Cette figure contient plusieurs cdfplots. Maintenant, le problème est que je ne peut pas utiliser les marqueurs parce que le devenir très dense dans l'intrigue. Si je veux faire les échantillons clairsemés je dois déposer quelques échantillons du cdfplot qui résultera en une ligne cdfplot différente.

Comment puis-je ajouter suffisamment de marqueurs tout en conservant la ligne?

Marker

8
demandé sur alandalusi 2011-07-23 07:00:41

6 réponses

une méthode est d'obtenir les propriétés XData/YData à partir de vos courbes suivre la solution (1) de @ephsmith et la remettre en arrière. Voici un exemple d'une courbe.

y = evrnd(0,3,100,1); %# random data

%# original data
subplot(1,2,1)
h = cdfplot(y);
set(h,'Marker','*','MarkerSize',8,'MarkerEdgeColor','r','LineStyle','none')

%# reduced data
subplot(1,2,2)
h = cdfplot(y);
set(h,'Marker','*','MarkerSize',8,'MarkerEdgeColor','r','LineStyle','none')
xdata = get(h,'XData');
ydata = get(h,'YData');
set(h,'XData',xdata(1:5:end));
set(h,'YData',ydata(1:5:end));

une autre méthode consiste à calculer le CDF empirique séparément en utilisant ECDF fonction, puis réduire les résultats avant de tracer avec la parcelle.

y = evrnd(0,3,100,1); %# random data
[f, x] = ecdf(y);

%# original data
subplot(1,2,1)
plot(x,f,'*')

%# reduced data
subplot(1,2,2)
plot(x(1:5:end),f(1:5:end),'r*')

Résultat plot output

8
répondu yuk 2012-10-10 13:22:22

je sais que C'est potentiellement inutile étant donné les fonctions intégrées de MATLAB (dans la boîte à outils des statistiques de toute façon), mais il peut être utile à d'autres téléspectateurs qui n'ont pas accès à la boîte à outils.

hist fonction. Pour obtenir une bonne approximation de la FMP empirique, le nombre de bacs doit être choisi de façon appropriée. Dans l'exemple suivant, je supposons que 64 bacs soient suffisants pour vos données.

%# compute a histogram with 64 bins for the data points stored in y
[f,x]=hist(y,64);

%# convert the frequency points in f to proportions
f = f./sum(f);

%# compute the cumulative sum of the empirical PMF
cmf = cumsum(f);

vous pouvez maintenant choisir le nombre de points que vous souhaitez tracer en utilisant l'exemple de données réduites donné par yuk.

2
répondu ephsmith 2011-07-24 05:01:45
n=20 ; % number of total data markers in the curve graph
M_n = round(linspace(1,numel(y),n)) ; % indices of markers
% plot the whole line, and markers for selected data points
plot(x,y,'b-',y(M_n),y(M_n),'rs')

très simple.....

1
répondu tudor 2011-08-24 19:55:26

essayez de réduire la taille des marqueurs.

x = rand(10000,1);
y = x + rand(10000,1);
plot(x,y,'b.','markersize',1);
0
répondu BlessedKey 2011-07-23 03:44:26

à des fins de publication, j'ai tendance à utiliser les outils de représentation graphique de la fenêtre figure. Cela vous permet de modifier tous les paramètres de la placette et de voir immédiatement le résultat.

Si le problème est que vous avez trop de points de données, vous pouvez:

1). Tracez en utilisant chaque nième échantillon des données. Expérimentez pour trouver un n qui résulte dans le regard que vous voulez.

2). J'ajuste généralement les courbes à mes données et ajoute quelques marqueurs peu placés aux tracés des ajustements à différencier les courbes.

0
répondu ephsmith 2011-07-23 12:19:04

honnêtement, pour des raisons de publication j'ai toujours trouvé que choisir différent 'LineStyle' ou 'LineWidth' propriétés pour les lignes donne des résultats beaucoup plus propres que l'utilisation de différents marqueurs. Cela serait aussi beaucoup plus facile que d'essayer de sous-échantillonner vos données, et pour les tracés faits avec CDFPLOT je trouve que les marqueurs de simplement bloquer le stairstep nature des lignes.

0
répondu gnovice 2011-07-24 05:10:40