我想在R或MATLAB中创建一个简单的散点图,其中包含两个与$ x $和$ y $相关的变量,$ \ epsilon_x $和$ \ epsilon_y $。
不是添加错误条,而是希望在每个$(x,y)$对周围创建一个“阴影框”,其中框的高度范围从($ y - \ epsilon_y $)到( $ y + \ epsilon_y $)并且框的宽度范围从($ x - \ epsilon_y $)到($ x + \ epsilon_y $)。
这在R或MATLAB中是否可行?如果是这样,我可以使用什么包或代码来生成这些图。理想情况下,我希望该软件包还支持非对称错误边界。
答案 0 :(得分:4)
你可以通过创建以下函数在matlab中完成:
function errorBox(x,y,epsx,epsy)
%# make sure inputs are all column vectors
x = x(:); y = y(:); epsx = epsx(:); epsy = epsy(:);
%# define the corner points of the error boxes
errBoxX = [x-epsx, x-epsx, x+epsx, x+epsx];
errBoxY = [y-epsy, y+epsy, y+epsy, y-epsy];
%# plot the transparant errorboxes
fill(errBoxX',errBoxY','b','FaceAlpha',0.3,'EdgeAlpha',0)
end
x
,y
,epsx
和epsy
都可以是矢量。
示例:
x = randn(1,5); y = randn(1,5);
epsx = rand(1,5)/5;
epsy = rand(1,5)/5;
plot(x,y,'rx')
hold on
errorBox(x,y,epsx,epsy)
结果:
答案 1 :(得分:1)
使用ggplot2可能更容易。首先创建一些数据:
set.seed(1)
dd = data.frame(x = 1:5, eps_x = rnorm(5, 0, 0.1), y = rnorm(5), eps_y = rnorm(5, 0, 0.1))
##Save space later
dd$xmin = dd$x - dd$eps_x
dd$xmax = dd$x + dd$eps_x
dd$ymin = dd$y - dd$eps_y
dd$ymax = dd$y + dd$eps_y
然后在ggplot2:
中使用矩形geomlibrary(ggplot2)
ggplot(dd) +
geom_rect(aes( xmax = xmax, xmin=xmin, ymin=ymin, ymax = ymax))
给出了第一个情节。当然,您不需要使用ggplot2来获得基本图形中的类似内容,请尝试:
plot(0, 0, xlim=c(0.5, 5.5), ylim=c(-1, 1), type="n")
for(i in 1:nrow(dd)){
d = dd[i,]
polygon(c(d$xmin, d$xmax, d$xmax, d$xmin), c(d$ymin, d$ymin, d$ymax,d$ymax), col="grey80")
}
得到第二个情节。
答案 2 :(得分:1)
以下是使用Matlab(具有不对称间隔)的方法。转换为对称的应该是微不足道的。
%# define some random data
x = rand(5,1)*10;y = rand(5,1)*10;
%# ex, ey have two columns for lower/upper bounds
ex = abs(randn(5,2))*0.3;ey=abs(randn(5,2));
%# create vertices, faces, for patches
vertx = bsxfun(@minus,y,ey(:,[1 2 2 1]))';
verty = bsxfun(@minus,y,ey(:,[1 1 2 2]))';
vertices = [vertx(:),verty(:)];
faces = bsxfun(@plus,[1 2 3 4],(0:4:(length(x)-1)*4)');
%# create patch
patch(struct('faces',faces,'vertices',vertices),'FaceColor',[0.5 0.5 0.5]);
%# add "centers" - note, the intervals are asymmetric
hold on, plot(x,y,'oy','MarkerFaceColor','r')
答案 3 :(得分:0)
使用ggplot2
中的R
包很简单。
# An example data frame
dat <- data.frame(x = 1:5, y = 5:1, ex = (1:5)/10, ey = (5:1)/10)
# Plot
library(ggplot2)
ggplot(dat) +
geom_rect(aes(xmin = x - ex, xmax = x + ex, ymin = y - ey, ymax = y + ey),
fill = "grey") +
geom_point(aes(x = x, y = y))
在aes
内的geom_rect
函数中,矩形的大小由ex
和ey
x
和y
定义。
答案 4 :(得分:0)
这是一个MATLAB答案:
x = randn(1,5); y = 3-2*x + randn(1,5);
ex = (.1+rand(1,5))/5; ey = (.2+rand(1,5))/3;
plot(x,y,'ro')
patch([x-ex;x+ex;x+ex;x-ex],[y-ey;y-ey;y+ey;y+ey],[.9 .9 .9],'facealpha',.2,'linestyle','none')