R:如何用ggplot2绘制两种不同的情节?

时间:2016-07-20 16:07:10

标签: r plot ggplot2

我的数据是这样的:

id <- c('a','a','b','b')
var <- c('Var1','Var2','Var1','Var2')
value <- c(123,421,2132,633)
df <- cbind(id,var,value)

我想绘制 Var1 的散点图和 Var2 的条形图,其中一个图例显示该点是 Var1 栏是 Var2

我试过这些代码:

g <- ggplot(data = df, aes(x=id, y=value, fill=var)
g + stat_identity(geom = c("point","bar"))

Var1 Var2 都以这种方式显示在散点中。

我还尝试为 Var1 Var2 创建两个seprate数据。

id = c('a','b')
Var1 = c(123,2132)
Var2 = c(421,633)
df1 = cbind.data.frame(id, Var1)
df2 = cbind.data.frame(id, Var2)

g <- ggplot()
g + geom_point(data = df1, aes(x=id, y=Var1),stat = "identity")) +
    geom_bar(data = df2, aes(x=id, y=Var2),stat = "identity"))

通过这种方式,我可以将散点图与条形图结合起来,但没有图例,我不知道如何让图例告诉读者点是 Var1 和bar是 Var2

1 个答案:

答案 0 :(得分:1)

首先,请参阅this post。谢谢@Daniel!

你可以试试这个:

id = c('a','b')
Var1 = c(123,2132)
Var2 = c(421,633)
df1 = cbind.data.frame(id, Var1)
df2 = cbind.data.frame(id, Var2)
library(ggplot2)
g <- ggplot()
g + geom_bar(data = df2, aes(x=id, y=Var2, fill = 'Var2'),stat = "identity")+
     geom_point(data = df1, aes(x=id, y=Var1, colour = 'Var1'),stat = "identity", size = 2) +
    scale_fill_manual(values = c('Var2' = 'blue'), name = 'Bars')+
    scale_colour_manual(values = c('Var1' = 'red'), name = 'Dots')

enter image description here

基本上,我们使用aesgeom_point中的geom_bar来定义颜色或填充。然后使用scale_*_manual来控制显示。另外,我们在 geom_bar之前调用geom_point ,以便将点标记为超过条。另外,我在size = 2中使用geom_point,以便更明确一点。