3

我有以下 ggplot2 图:

ggplot(iris) + geom_boxplot(aes(x=Species, y=Petal.Length, fill=Species)) + coord_flip()

我想将其绘制为水平密度图或直方图,这意味着每个物种或直方图都有密度线图而不是箱线图。这不能解决问题:

> ggplot(iris) + geom_density(aes(x=Species, y=Petal.Length, fill=Species)) + coord_flip()
Error in eval(expr, envir, enclos) : object 'y' not found

为简单起见,我将Species其用作x变量,fill但在我的实际数据中,X 轴表示一组条件,而填充表示另一组条件。尽管这对于绘图目的无关紧要。我正在尝试使 X 轴代表不同的条件,将值y绘制为密度/直方图而不是箱线图。

编辑这可以用一个具有两个类似因子的变量(如 Species)的变量来更好地说明。在mpg数据集中,我想为每个制造商制作一个密度图,绘制displ每个cyl值的分布。x 轴(在翻转坐标中垂直)代表每个制造商,直方图的值为,但对于每个制造商,我想要与该制造商的值displ一样多的直方图。cyl希望这更清楚。我知道这不起作用,因为y=期望计数。

ggplot(mpg, aes(x=manufacturer, fill=cyl, y=displ)) + 
    geom_density(position="identity") + coord_flip()

我得到的最接近的是:

> ggplot(mpg, aes(x=displ, fill=cyl)) + 
+     geom_density(position="identity") + facet_grid(manufacturer ~ .) 

但我不想要不同的网格,我希望它们在同一个图中是不同的条目,就像在直方图的情况下一样。

4

1 回答 1

6

像这样的东西?对于histogramdensity图,y变量是count。因此,您必须x = Petal.Length在 y 轴上绘制其频率(对于给定的 binwidth)。只需使用fill=Specieswithx=Petal.Length来赋予颜色 by Species

对于histogram

ggplot(iris, aes(x=Petal.Length, fill=Species)) + 
       geom_histogram(position="identity") + coord_flip()

对于density

ggplot(iris, aes(x=Petal.Length, fill=Species)) + 
       geom_density(position="identity") + coord_flip()

编辑:也许你正在寻找facetting??

ggplot(mpg, aes(x=displ, fill=factor(cyl))) +  
     geom_density(position="identity") + 
     facet_wrap( ~ manufacturer, ncol=3)

给出:

在此处输入图像描述

编辑:因为,你不想要facetting,我能想到的唯一其他方法是通过粘贴manufacturercyl一起创建一个单独的组:

dd <- mpg
dd$grp <- factor(paste(dd$manufacturer, dd$cyl))

ggplot(dd, aes(x=displ)) +  
     geom_density(aes(fill=grp), position="identity")

给出:

在此处输入图像描述

于 2013-03-07T15:05:22.387 回答