Matlab中的分类散点图

3
你如何在Matlab中制作一个类似于这个的分类散点图?

Categorical scatter plot in R

上述图表是使用R生成的,是对这个问题的回应。

我会使用subplot……这些是真正的三个独立的图。或者,你可以缩放每个数据集的“x”值以适应定义的范围(我会选择1),然后只需向每个数据集添加一个常量。 - Dan
3个回答

3
您可以使用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)])

这将导致:

示例图


2

0

您可以在普通的scatter图上设置'XJitter'参数,如此处所述

'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);

根据文档,以下是抖动的实现方式:

使用加权高斯核密度估计y和每个x位置上点的相对数量的均匀随机值来抖动蜂群图中的点。当您调用swarmchart函数时,此行为对应于Scatter对象上XJitter属性的默认'density'设置。

每个x位置上点的最大扩散默认为相邻x值之间最小距离的90%:

spread = 0.9 * min(diff(unique(x)));

如果您想了解如何绘制平均值或中位数值的线,请参阅此答案

如果您对双样本比较感兴趣,请查看gardnerAltmanPlot函数(在R2022a中引入)。这包括差异的置信区间。

swarmchart example


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接