所以我在R中使用了基本数据“虹膜”数据
到目前为止我所做的是创建一个向量,其中x值为Sepal.Length,y值为密度函数输出。然后我绘制了它们,但它并没有按照我的意图在3个不同的组(按物种)显示。
我的直觉是我的分组有问题......你能帮助我吗?
<>
x<-iris$Sepal.Length
y<-iris$Species
z<-split(x,y)
x_min <- min(x)
x_max <- max(x)
a <- sapply(z, function(x) density(x,from=x_min,to=x_max))
a
for(i in 1:length(a)){
polygon(a$x[i],a$y[i])
}
这是输出应该是什么样子
非常感谢
ggplot使这样的分组操作变得更加容易,因为你只需要将分组变量映射到用于区分组的美学(这里是fill
),它会为你处理颜色和图例。 (当然,您可以进一步定制。)
library(ggplot2)
ggplot(iris, aes(Sepal.Length, fill = Species)) + geom_density()
如果你想在基础绘图中做到这一点,通常最简单的方法是首先设置空窗口,然后迭代组。既然你想要设置颜色和组,Map
比lapply
更容易。传说需要额外的电话。
plot(x = c(4, 8.5), y = c(0, 1.5), type = "n",
xlab = "Sepal Length", ylab = "Density",
main = "Density plot of multiple groups");
d <- lapply(split(iris$Sepal.Length, iris$Species), density)
Map(function(dens, col) polygon(dens, col = col),
dens = d, col = c('pink', 'lightgreen', 'lightblue'));
legend("topright", levels(iris$Species), fill = c('pink', 'lightgreen', 'lightblue'))