当我绘制以下内容时:
library(ggplot2)
ggplot() +
geom_point(data=mtcars, mapping=aes(x=mpg, y=wt, col=factor(cyl)))
现在我想添加具有不同组和颜色的不同数据
library(ggplot2)
data = data.frame(x = rep(12, times=50), y = seq(1, 5, length.out = 50), c = c(rep(1, times=10),
rep(2, times=10),
rep(3, times=10),
rep(4, times=10),
rep(5, times=10)))
ggplot() +
geom_point(data=mtcars, mapping=aes(x=mpg, y=wt, col=factor(cyl))) +
geom_point(data=data, aes(x=x, y=y, col=factor(c)), inherit.aes = FALSE)
答案 0 :(得分:1)
您不能将单个美学(在这种情况下为颜色)映射到同一图中的两组不同值。 ggplot 正在以唯一有效的方式来解释您的命令:构造一个单一的色标,其中包含mtcars$cyl
和data$c
中的所有唯一值。
但是,通过将颜色映射到一组值并填充到另一组值,我们可以接近所需的值。我们可以使用pch = 21
,因为该点样式既有颜色又有填充。我们在一层中关闭点笔画(颜色),然后在另一层中关闭点:
ggplot() +
geom_point(data=mtcars, mapping=aes(x=mpg, y=wt, col=factor(cyl)), pch = 21) +
geom_point(data=data, aes(x=x, y=y, fill=factor(c)), pch = 21, color = '#00000000')
答案 1 :(得分:1)
但是,我们有带有基本R的plot()
的选项。根据this answer,我们可以定义适合我们数据的调色板:
rbPal1 <- colorRampPalette(c('red','blue'))
rbPal2 <- colorRampPalette(c('green', 'purple','orange'))
mtcars$cyl.col <- rbPal1(8)[mtcars$cyl] # for mtcars
data$c.col <- rbPal2(5)[data$c] # for your data
然后我们可以通过引用这些颜色(甚至带有图例)来绘制它。
with(mtcars, plot(mpg, wt, col=cyl.col, pch=16))
with(data, points(y ~ x, col=c.col, pch=16))
legend("topright", as.character(unique(mtcars$cyl)), title="cyl",
col=unique(mtcars$cyl.col), lty=0, lwd = 2, pch=16)
legend("bottomright", as.character(unique(data$c)), title="c",
col=unique(data$c.col), lty=0, lwd = 2, pch=16)