r - 使用 aes_string 时 ggplot2 中两个 geom_point() 的颜色

标签 r ggplot2

我想从数据框中的两个系列“Pos”和“Neg”(y 值)生成一个图。 x 值位于“平均值”列中。我希望这个系列有不同的颜色。

搜索 stackoverflow 给了我一个类似的问题:change color for two geom_point() in ggplot2 ,但我想使用 aes_string 以避免检查包时出现注释。

我使用 aes 和“自动”颜色让它工作,如下面的第一个示例所示。但是,我无法弄清楚如何使用 aes_string 生成相同的图,并且仍然让 ggplot 决定颜色。我觉得这应该是一件很简单的事情......

一个可重现的例子:

exData <- data.frame(Marker = rep("TH01", 10),
                 Mean = seq(1:10),
                 Neg = -1*runif(10,0.1,1),
                 Pos = runif(10,0.1,1))

# Produce the correct plot, with 'automatic' colours.
gp <- ggplot(exData, aes_string(x="Mean"),
             shape=val_shape, alpha=val_alpha)
gp <- gp + geom_point(aes(y=Pos, colour="Max"))
gp <- gp + geom_point(aes(y=Neg, colour="Min"))
gp <- gp + scale_colour_discrete(name = "Legend")
print(gp)

# Produce the correct plot, but not with 'automatic' colours.
gp <- ggplot(exData, aes_string(x="Mean"),
             shape=val_shape, alpha=val_alpha)
gp <- gp + geom_point(aes_string(y="Pos"), colour=1)
gp <- gp + geom_point(aes_string(y="Neg"), colour=2)
gp <- gp + scale_colour_discrete(name = "Legend")
print(gp)

最佳答案

您的数据格式化方式不适合 ggplot2 .首先将其转换为“长”格式:

library(reshape2)
exData.m <- melt(exData, id.vars=c("Marker", "Mean"))

ggplot(exData.m, aes(x=Mean, y=value, color=variable)) + geom_point()

Result of plot

根据经验,每种美学(x、y、颜色、形状、alpha 等)都需要绘制数据框中的一列。 reshape2图书馆在这里很有帮助。

关于r - 使用 aes_string 时 ggplot2 中两个 geom_point() 的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20459205/

相关文章:

r - 在 R 中对大数据进行 one-hot 编码的有效方法

R:查找满足条件的行

r - 如何标记由 ggplot2 组成的分位数-分位数图的点?

减少轴和几何体之间的空间

r - 如何在ggplot中绘制堆积和分组的条形图?

r - 有轴,但直方图中没有框架(R :ggplot2)

r - 限制减法结果的下限

r - 为什么 `poly` 提示度数小于唯一点数?

r - 更高效的 .RData?

r - 安装 2.15 后 ggplot2 中的 alpha channel 不起作用