2

RまたはMATLABで、エラーが関連付けられた2つの変数$x$と$y$、$ \epsilon_x$と$\epsilon_y$を含む単純な散布図を作成したいと思います。

ただし、エラーバーを追加する代わりに、ボックスの高さが($ y-\ epsilon_y $)から($ y + \ epsilon_y $)で、ボックスの幅は($ x-\ epsilon_y $)から($ x + \ epsilon_y $)の範囲です。

これはRまたはMATLABで可能ですか?もしそうなら、これらのプロットを生成するためにどのパッケージまたはコードを使用できますか。理想的には、パッケージが非対称のエラー範囲もサポートするようにしたいと思います。

4

5 に答える 5

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にすることができます。epsxepsy

例:

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)

結果:

于 2013-02-22T04:33:24.643 に答える
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で長方形のgeomを使用します。

library(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番目のプロットを取得します。

ggplot2グラフ

ベースグラフィックス

于 2013-02-21T17:41:04.500 に答える
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')

ここに画像の説明を入力してください

于 2013-02-21T18:38:53.290 に答える
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_rectexeyxy

ここに画像の説明を入力してください

于 2013-02-21T18:43:50.540 に答える
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')
于 2013-02-22T02:52:12.410 に答える