Matlab中的分类散点图

j13ufse2  于 2023-01-05  发布在  Matlab
关注(0)|答案(3)|浏览(176)

你如何在Matlab中生成与此类似的分类散点图?

上面的图表是在R中生成的,以响应this question

6tdlim6h

6tdlim6h1#

您可以使用scatter的未记录jitter属性:

% create example data
ydata = rand(50, 3)*2+2; 

[r, c] = size(ydata);

xdata = repmat(1:c, r, 1);

% for explanation see 
% http://undocumentedmatlab.com/blog/undocumented-scatter-plot-jitter
scatter(xdata(:), ydata(:), 'r.', 'jitter','on', 'jitterAmount', 0.05);

hold on;

plot([xdata(1,:)-0.15; xdata(1,:) + 0.15], repmat(mean(ydata, 1), 2, 1), 'k-')

ylim([0 max(ydata(:)+1)])

这导致:

rqqzpn5f

rqqzpn5f2#

我知道这篇文章很旧,但我最近更新了这个函数,你可能会觉得有用,因为它总是以相同的方式分布点,并允许非常高的个性化的形状,颜色和点的分布。我认为它很好地再现了一些出版物中显示的那些图形的形状。如果你感兴趣,可以看看
http://www.mathworks.com/matlabcentral/fileexchange/54243-univarscatter
Image of the plots

0h4hbjxa

0h4hbjxa3#

您可以在常规scatter图上将'XJitter'参数设置为documented here
可以修改'XJitterWidth'参数以获得更宽或更窄的点云。
例如,下面的图像创建如下:

% create dummy data
n = 100;
x = [ones(n,1), 2*ones(n,1), 3*ones(n,1)];
y = rand([n, 3]);  % uniform distribution

% create plot
scatter(x, y, 'XJitter', 'rand', 'XJitterWidth', 0.2);

不确定此选项是何时首次引入的,但它也用于swarmchart函数,该函数是在Matlab R2020b中引入的:

swarmchart(x, y, 'XJitterWidth', 0.2);

以下是根据docs实现抖动的方式:
群图中的点使用均匀随机值进行抖动,这些值由y的高斯核密度估计值和每个x位置的相对点数加权。此行为对应于调用swarmchart函数时Scatter对象的XJitter属性的默认“密度”设置。
默认情况下,每个x位置上的点的最大扩散为相邻x值之间最小距离的90%:
spread = 0.9 * min(diff(unique(x)));
要了解如何绘制平均值或中值的直线,请查看this answer
如果你对两个样本的比较感兴趣,可以看看gardnerAltmanPlot函数(R2022a中引入的),其中包括差异的置信区间。

相关问题