Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to background geom_vline and geom_hline in ggplot 2 in a bubble chart

Tags:

r

I would like to add a vertical line and a horizontal one on a bubble chart, without overplotting the bubbles. Here come the data:

a<-c("np", "prepp", "vp", "animal", "artifact", "communication", "ipv", "isv")
b<-c(-0.51, 0.32, 0.85, -0.61, -0.36, 0.86, -0.02, 1.05)
c<-c(0.10, 0.25, -0.20, 0.99, 1.09, -0.35, 0.00, -0.08)
d<-c(68.23, 4.87, 41.42, 2.44, 19.49, 2.44, 112.09, 2.44)
e<-c("synt", "synt", "synt", "sem", "sem", "sem", "cx", "cx")

data<-cbind(a, b, c, d, e)
colnames(data)<-c("Variables", "Dim.1", "Dim.2", "Freq_pmw", "SynSem_index")
data<-as.data.frame(data)
data[, 2]<-as.numeric(as.character(data[, 2]))
data[, 3]<-as.numeric(as.character(data[, 3]))
data[, 4]<-as.numeric(as.character(data[, 4]))

radius<-sqrt(data$Freq_pmw/pi)

plot<-ggplot(data, aes(x=data$Dim.1, y=data$Dim.2)) + 
  xlim(-1, 1.5) + ylim(-1, 3) + 
  theme_bw() + xlab("Dimension 1") + ylab("Dimension 2")
plot<-plot+geom_point(aes(size=radius, col="darkgrey", fill=data$SynSem_index), pch=21, show.legend=F)+
  scale_size_continuous(range=c(1, 20)) +
  geom_text_repel(label=data$Variables, size=3) +
  geom_vline(colour="red", xintercept=0) +
  geom_hline(colour="red", yintercept=0)
plot

The output of this is rendered with the following graph:

enter image description here

How to avoid overplotting the bubbles with the coordinate axes?

Thanking you in advance!

like image 758
CBechet Avatar asked Jan 20 '16 13:01

CBechet


1 Answers

Just put the geom_vline() and geom_hline() pieces first (ggplot2 draws layers in sequential order).

library(ggplot2); library(ggrepel)
plot0 <- ggplot(data, aes(x=Dim.1, y=Dim.2)) + 
   xlim(-1, 1.5) + ylim(-1, 3) + 
   theme_bw() + xlab("Dimension 1") + ylab("Dimension 2")


plot0 + geom_vline(colour="red", xintercept=0) +
        geom_hline(colour="red", yintercept=0) + 
        geom_point(aes(size=radius, fill=SynSem_index),
                   col="darkgrey", 
                   pch=21, show.legend=FALSE)+
   scale_size_continuous(range=c(1, 20)) +
   geom_text_repel(aes(label=Variables), size=3)
like image 112
Ben Bolker Avatar answered Oct 24 '22 19:10

Ben Bolker