Reputation: 127
My data is like this :
id <- c('a','a','b','b')
var <- c('Var1','Var2','Var1','Var2')
value <- c(123,421,2132,633)
df <- cbind(id,var,value)
I would like to plot a scatter plot of Var1 and a bar chart of Var2, with a legend showing that the dot is Var1 and the Bar is Var2
I have tried these code :
g <- ggplot(data = df, aes(x=id, y=value, fill=var)
g + stat_identity(geom = c("point","bar"))
But both Var1 and Var2 are showed in scatter point in this way.
I also tried to create two seprate data for Var1 and Var2.
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"))
In this way, I can combine a scatter point with a bar chart, but there is no legend and I don't know how to make the legend telling readers that the dot is Var1 and the bar is Var2
Upvotes: 0
Views: 255
Reputation: 10781
First off, see this post. Thanks @Daniel!
You could try this:
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')
Basically, we use the aes
within geom_point
and geom_bar
to define our color or fill. Then use scale_*_manual
to control display. Also, we call geom_bar
before geom_point
so that the dots are plotted over the bar. Also, I use size = 2
in geom_point
so that the point is a little more distinguishable.
Upvotes: 1