Matlab中的散点图与x轴刻度不等距

时间:2015-06-10 18:32:54

标签: matlab

在Matlab中考虑以下散点图

A=[1 0 0 0 2 0 0 0 0 0 0 0 1 2 0 0 0 2 1 200 300]';
xRange = 0: max(A);  
prob=zeros(size(xRange,2),1);
for r=1:size(xRange,2)
prob(r) = sum(ismember(A,xRange(r)))/size(A,1); 
end

scatter(xRange,prob, 'b');  
xlim([-2 max(A)+2])
ylim([-0.5 1.5])

我想改变散点的样子,以使其更清晰:想法是在x轴上放置以下刻度

[-0.5 0 1 2 3 301]

但棘手的部分是它们应该是等距的,以便我可以使用更高的prob值放大散点图的一部分。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

实现此目的的一种方法是使用插值将数据转换为新的比例。我们假设你想要数据值

tickVal = [-0.5 0 1 2 3 301];

出现在图形位置

tickPos = 0 : 5;

通过插值确定所有数据的图形位置,并绘制转换后的数据:

xTransformed = interp1(tickVal, tickPos, xRange);
scatter(xTransformed, prob, 'b');  
xlim([min(tickPos), max(tickPos)])
ylim([-0.5 1.5])

现在我们必须确保刻度不会反映转换后的原始数据值:

set(gca, 'XTick', tickPos)
set(gca, 'XTickLabel', num2cell(tickVal))

结果如下:

这是你想要的吗?