0

我有一个包含 5 列的文本表。我想在同一个图上绘制 4 列作为单独的密度图。我可以实现如下: 在此处输入图像描述

上图的代码:

library(ggplot2)
library(grid)

dat <- read.table(textConnection("
file        low        high       avg               lowest
102         4218.0     5437.0     4739.0            4723.0
103         4516.0     5765.0     5061.0            5036.0
104         4329.0     5554.0     4858.0            4838.0
107         4094.0     5261.0     4596.0            4578.0
108         4334.0     5569.0     4865.0            4846.0
109         4397.0     5596.0     4924.0            4896.0
110         4046.0     5257.0     4555.0            4547.0
"), header=TRUE)

x_low = dat$low
x_high = dat$high
x_avg = dat$avg
x_lowest = dat$lowest

plotter = ggplot() + geom_density(aes(x=x_low), colour="red", fill="red", alpha = .3, data=data.frame(dat$low))
plotter = plotter + geom_density(aes(x=x_high),colour="blue", fill="blue", alpha = .3, data=data.frame(dat$high))
plotter = plotter + geom_density(aes(x=x_avg), colour="green", fill="green", alpha = .3, data=data.frame(dat$avg))
plotter = plotter + geom_density(aes(x=x_lowest), colour="purple", fill="purple", alpha = .3, data=data.frame(dat$lowest))
plotter = plotter + xlim(c(2000,7000))
print(plotter)

我现在想在情节的一边有一个传奇。据我了解,我需要colour在括号内移动aes

我这样做如下:

library(ggplot2)
library(grid)

dat <- read.table(textConnection("
file        low        high       avg               lowest
102         4218.0     5437.0     4739.0            4723.0
103         4516.0     5765.0     5061.0            5036.0
104         4329.0     5554.0     4858.0            4838.0
107         4094.0     5261.0     4596.0            4578.0
108         4334.0     5569.0     4865.0            4846.0
109         4397.0     5596.0     4924.0            4896.0
110         4046.0     5257.0     4555.0            4547.0
"), header=TRUE)

x_low = dat$low
x_high = dat$high
x_avg = dat$avg
x_lowest = dat$lowest

plotter = ggplot() + geom_density(aes(x=x_low, colour="red", fill="red"), alpha = .3, data=data.frame(dat$low))
plotter = plotter + geom_density(aes(x=x_high, colour="blue", fill="blue"), alpha = .3, data=data.frame(dat$high))
plotter = plotter + geom_density(aes(x=x_avg, colour="green", fill="green"), alpha = .3, data=data.frame(dat$avg))
plotter = plotter + geom_density(aes(x=x_lowest, colour="purple", fill="purple"), alpha = .3, data=data.frame(dat$lowest))

plotter = plotter + xlim(c(2000,7000))
print(plotter)

这输出:

在此处输入图像描述

现在每个图的颜色都是错误的(与第一个图相比)以及图例中的标签。

我怎样才能:

  1. 修正着色
  2. 删除每个密度图的深色轮廓
  3. 更正图例
4

2 回答 2

1

Dan M. 的回答是惯用且最直接的方法,但我想展示另一种可能在某些情况下占有一席之地的方法。你有colourfill包含他们应该使用的颜色的比例;您正在寻找的规模是身份规模。添加以下行:

plotter = plotter + scale_fill_identity("", 
  labels=c("red"="low", "blue"="high", "green"="avg", "purple"="lowest"),
  guide="legend") 
plotter = plotter + scale_colour_identity("",
  labels=c("red"="low", "blue"="high", "green"="avg", "purple"="lowest"),
  guide="legend")

""参数去掉了图例标题(如果你想要那里的东西,替换它),给出labels每种颜色应该被标记的内容。需要一个命名向量来确保颜色和标签之间的匹配是正确的(否则,标签必须按颜色的字母顺序给出)。guide=TRUE绘制图例;默认情况下,身份标度没有图例。 在此处输入图像描述

于 2012-09-28T16:19:54.480 回答
1

如果您使用包中的数据重新组织数据melt,则可以简化此操作。reshape2我认为以下代码将为您提供正确的图例,您想要的填充颜色,并摆脱密度图的轮廓:

dat.m <- melt(dat, id="file")
ggplot(dat.m, aes(value, fill=variable)) + geom_density(alpha = .3, color=NA) + scale_fill_manual(values=c("red", "blue", "green", "purple"))
于 2012-09-28T12:43:54.910 回答