覆盖许多具有不同x范围的图

时间:2016-03-14 22:01:46

标签: r plot

我想制作一张类似于此图像what I want的情节,但我不知道如何。我在下面编写了代码,但我找不到获取情节的方法。这里的要点是将密度线添加到我的原始图(Relation Masa-SFR),密度应该是每x 0.3英寸。我的意思是从7到7.3的一行,从7.3到7.6的下一行,依此类推。使用下面的代码(继续直到x = 12),我得到了这个[plot] [2]

plot(SFsl$MEDMASS, SFR_SalpToMPA,xlim= range(7:12),
  ylim= range(-3:2.5),ylab="log(SFR(M(sun)/yr)",
  xlab="log(M(star)/(M(sun)")  
title("Relacion Masa-SFR")
par(new=TRUE)
FCUTsfrsl1=(SFsl$MEDMASS >= 7 & SFsl$MEDMASS <=7.3  &
  SFR_SalpToMPA < 2 & SFR_SalpToMPA > -3)
x <- SFR_SalpToMPA[FCUTsfrsl1]
y <- density(x)
plot(y$y, y$x, type='l',ylim=range(-3:2.5), col="red",
  ylab="", xlab="", axes=FALSE)

我做了你说的但是我得到了这个plot,我不知道我做错了什么

1 个答案:

答案 0 :(得分:0)

由于我没有您的数据,我不得不做些准备。如果这样做你想要的,我认为你可以根据你的实际数据进行调整。

set.seed(7)
x <- runif(1000, 7, 12)
y <- runif(1000, -3, 3)
DF <- data.frame(x = x, y = y)
plot(DF$x, DF$y)

# Cut the x axis into 0.3 unit segments, compute the density and plot
br <- seq(7, 12, 0.333)
intx <- cut(x, br) # intervals
intx2 <- as.factor(cut(x, br, labels = FALSE)) # intervals by code

intx3 <- split(x, intx) # x values
inty <- split(y, intx2) # corresponding y values for density calc

for (i in 1:length(intx3)) {
    xx <- seq(min(intx3[[i]]), max(intx3[[i]]), length.out = 512)
    lines(xx, density(inty[[i]])$y, col = "red")
    }

这会产生以下图像。您需要仔细观察,但每0.3个单位间隔有一个单独的密度图。 enter image description here

编辑更改用于计算密度的维度

set.seed(7)
x <- runif(1000, 7, 12)
y <- runif(1000, -3, 3)
DF <- data.frame(x = x, y = y)
plot(DF$x, DF$y, xlim = c(7, 15))

# Cut the x axis into 0.3 unit segments, compute the density and plot
br <- seq(7, 12, 0.333)
intx <- cut(x, br) # intervals
intx2 <- as.factor(cut(x, br, labels = FALSE)) # intervals by code

intx3 <- split(x, intx) # x values
inty <- split(y, intx2) # corresponding y values

# This gives the density values in the horizontal direction (desired)
# This is the change, the above is unchanged.
for (i in 1:length(intx3)) {
    yy <- seq(min(inty[[i]]), max(inty[[i]]), length.out = 512)
    offset <- min(intx3[[i]])
    lines(density(intx3[[i]])$y + offset, yy, col = "red")
    }

给出了:

enter image description here