合并两个不同的图:一个在X轴上,另一个在Y轴上 [英] Merge two different plots: one in the X-axis and the other in the Y-axis

查看:99
本文介绍了合并两个不同的图:一个在X轴上,另一个在Y轴上的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用R独立表示了这两个图:

I have the represented independently these two plots using R:

#PLOT 1
    x<-250:2500
    #Hsap. Northern European
        a<-dnorm(x,1489,167)
    #Hsap. South African
        b<-dnorm(x,1472,142)
    
    plot(x,a, type="l", lwd=3, ylim=c(0,1.2*max(a,b,c)), ylab="Probability Density", xlab="Microns")
    lines(x,b, type="l", lwd=3, col="Red")


情节2


    #CUSPAL ENAMEL FORMATION TIME
    x<-0:800
    #Hsap. Northern European
        a<-dnorm(x,447,37)
    #Hsap. South African
        b<-dnorm(x,444,33)
    
    plot(x,a, type="l", lwd=3, ylim=c(0,1.2*max(a,b,c)), ylab="Probability Density", xlab="Days")
    lines(x,b, type="l", lwd=3, col="Red")
![enter image description here][2]

我想使用R合并两者并获得类似于以下所示的图像。有趣的是,我也想突出+ -1SD的间隔,以查看两个图中的重叠区域。

I would like to merge both using R and obtain an image similar to that shown below. It is interesting to say that I would like as well to stand out the intervals of +- 1SD, to see the overlapping area in the two plots.

确切的R中的代码成功实现我的目的?

Which is the exact code in R to get into success my purpose?

UPDATE

现在,有了我的数据,我得到下一个数字:

Now, with my data I get the next figure:

您可以可以看到,重叠的标准偏差不在最佳位置。我希望这些重叠区域高于X轴上的正态分布。这样一来,我就能清楚地看到它们。

As you can see, the overlapping standard deviations are not in the best place. I'd like these overlapping areas were above the normal distributions placed at the X-axis. In this way I could see clearly them.

问题是,您能写一些例子吗,我将学习如何移动这些秤来避免这种情况?

So the question is, can you write some examples and in that way I learn how I can move these scales to avoid that situation?

在我的示例中,我想向上移动右正态分布(Y轴)。

In my example I would like to move upwards the right-normal distributions (Y-axis).

x1<-30:200
a1<-dnorm(x1,87,15)
b1<-dnorm(x1,89,13)
c1<-dnorm(x1,92,16)
d1<-dnorm(x1,104,15)

x2<-000:1600
a2<-dnorm(x2,724,66)
b2<-dnorm(x2,724,50)
d2<-dnorm(x2,835,117)

scale<-range(pretty(range(a1,a2,b1,b2,c1,d1,d2)))

remap<-function(x, to, from=range(x)) {
    (x-from[1]) / (from[2]-from[1]) * (to[2]-to[1]) + to[1] 
}

plot(NA, NA, xaxt="n", yaxt="n", type="n", xlim=scale, ylim=scale)
rect(remap(87-15, scale, range(x1)), scale[1],
     remap(87+15, scale, range(x1)), scale[2], col="#ff606025", lty=1)
rect(remap(89-13, scale, range(x1)), scale[1],
     remap(89+13, scale, range(x1)), scale[2], col="#ff606025", lty=2)
rect(remap(92-16, scale, range(x1)), scale[1],
     remap(92+16, scale, range(x1)), scale[2], col="#3dae0025", lty=0)
rect(remap(104-15, scale, range(x1)), scale[1],
     remap(104+15, scale, range(x1)), scale[2], col="#005ccd25", lty=0)

rect(scale[1], remap(724-66, scale, range(x2)),
     scale[2], remap(724+66, scale, range(x2)), col="#ff606025", lty=1)
rect(scale[1], remap(724-50, scale, range(x2)),
     scale[2], remap(724+50, scale, range(x2)), col="#ff606025", lty=2)
rect(scale[1], remap(835-117, scale, range(x2)),
     scale[2], remap(835+117, scale, range(x2)), col="#005ccd25", lty=0)

lines(remap(x1,scale), a1, col="darkred", lwd=3)
lines(remap(x1,scale), b1, col="darkred", lwd=3, lty=3)
lines(remap(x1,scale), c1, col="darkgreen", lwd=3)
lines(remap(x1,scale), d1, col="darkblue", lwd=3)

lines(scale[2]-a2, remap(x2,scale), col="darkred", lwd=3)
lines(scale[2]-b2, remap(x2,scale), col="darkred", lwd=3, lty=3)
lines(scale[2]-d2, remap(x2,scale), col="darkblue", lwd=3)


axis(2); axis(3)
axis(1, at=remap(pretty(x1), scale), pretty(x1))
axis(4, at=remap(pretty(x2), scale), pretty(x2))

谢谢

推荐答案

棘手的事情是每个图只能容纳一个坐标系。因此,我们要做的只是将所有值缩放到相同的范围,然后我们可以在轴上进行一些修整操作,以返回到正确的缩放比例。这是一个完整的解决方案

The tricky thing is each plot can only hold one coordinate system. So what we need to do are just scale all the values to the same range, then we can do some fudging on the axis to return to the correct scale. Here's a complete solution

x1<-250:2500
a1<-dnorm(x1,1489,167)
b1<-dnorm(x1,1472,142)

x2<-0:800
a2<-dnorm(x2,447,37)
b2<-dnorm(x2,444,33)

scale<-range(pretty(range(a1,a2,b1,b2)))

remap<-function(x, to, from=range(x)) {
    (x-from[1]) / (from[2]-from[1]) * (to[2]-to[1]) + to[1] 
}


plot(NA, NA, xaxt="n", yaxt="n", type="n", xlim=scale, ylim=scale, xlab="", ylab="")
rect(remap(1489-167, scale, range(x1)), scale[1],
    remap(1489+167, scale, range(x1)), scale[2], col=rgb(0,0,0,.25), lty=0)
rect(remap(1472-142, scale, range(x1)), scale[1],
    remap(1472+142, scale, range(x1)), scale[2], col=rgb(1,0,0,.25), lty=0)

rect(scale[1], remap(447-37, scale, range(x2)),
    scale[2], remap(447+37, scale, range(x2)), col=rgb(0,0,0,.25), lty=0)
rect(scale[1], remap(444-33, scale, range(x2)),
    scale[2], remap(444+33, scale, range(x2)), col=rgb(1,0,0,.25), lty=0)

lines(remap(x1,scale), a1, col="black", lwd=3)
lines(remap(x1,scale), b1, col="red", lwd=3)
lines(scale[2]-a2, remap(x2,scale), col="black", lwd=3)
lines(scale[2]-b2, remap(x2,scale), col="red", lwd=3)
axis(2); axis(3)
axis(1, at=remap(pretty(x1), scale, range(x1)), pretty(x1))
axis(4, at=remap(pretty(x2), scale, range(x2)), pretty(x2))

产生

这篇关于合并两个不同的图:一个在X轴上,另一个在Y轴上的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆