在同一图中绘制几个密度

时间:2017-09-02 19:04:47

标签: r plot

我想在同一个图中绘制4个数据集。我一直试图覆盖,但数据是相似的,他们无法区分。 我有这段代码:

plot(density(rnd1[,5]*f),lty = 1,lwd = 1,col="black",xlim=c(0,2750),xlab="minutes",main='Event 5')
par(new=T)
plot(density(fpsdata[,5]*f), type="l",lty = 2,lwd = 2,col="red", xlim=c(0,2750), xlab="", ylab='',axes=F,main='')
par(new=T)
plot(density(rankdata[,5]*f), type="l",lty = 1,lwd = 2,col="blue", xlim=c(0,2750), xlab="", ylab='',axes=F,main='')
par(new=T)
plot(density(graddata[,5]*f), type="l",lty = 4,lwd = 2,col= "green3", xlim=c(0,2750), xlab="", ylab='',axes=F,main='')

问题在于四个密度图具有相同的高度并且看起来很奇怪,因为我一直在用另一个程序绘制相同的数据,并且密度具有不同的高度。

有人知道为什么R在一个图中组合时使所有密度图的高度相同?

此致

2 个答案:

答案 0 :(得分:1)

请勿使用par(new=T)。而是创建一个空图,然后为每个密度添加lines

#DATA
set.seed(42)
a = rnorm(25)
b = rnorm(25)

#Calculate density
ad = density(a)
bd = density(b)

#Create empty plot so as to accommodate all data
plot(c(ad$x, bd$x), c(ad$y, bd$y), type = "n")

#Add density plots
lines(ad$x, ad$y)
lines(bd$x, bd$y, lty = 2)

enter image description here

答案 1 :(得分:1)

这是一个ggplot2方法:

library(tidyverse) # Includes ggplot2 and dplyr (the two packages we'll use below)

# Fake data
set.seed(2)
f = 2
df1 = data.frame(value=rnorm(123, 1.1, 2))
df2 = data.frame(value=rnorm(245, 0.8, 2.5))
df3 = data.frame(value=rnorm(211, 1.4, 1.9))

# Stack data frames and plot
bind_rows(setNames(list(df1, df2, df3), c("df1","df2","df3")), .id="source") %>% 
  ggplot(aes(value*f, colour=source)) +
    geom_density() +
    theme_classic()

enter image description here