Lucien S.
Lucien S.

Reputation: 5345

Overlay different datasets in same facetted plot in ggplot2

I need to gather two facet columns into one column with ggplot2.

In the following example, I need to overlay the content of the two columns DEG and RAN into one, while giving different colours to DEG and RAN data (small points and smooth line) and provide the corresponding legend (so I can distinguish them as they are overlayed).

I feel my code is not too, too far from what I need, but the relative complexity of the dataset blocks me. How to go about achieving this in ggplot2?

Here's my code so far:

require(reshape2)
library(ggplot2)
library(RColorBrewer)

fileName = paste("./4.csv", sep = "") # csv file available here: https://www.dropbox.com/s/bm9hd0t5ak74k89/4.csv?dl=0

mydata = read.csv(fileName,sep=",", header=TRUE)

dataM = melt(mydata,c("id"))
dataM = cbind(dataM,colsplit(dataM$variable,pattern = "_",names = c("NM", "ORD", "CAT")))
dataM$variable <- NULL
dataM <- dcast(dataM, ... ~ CAT, value.var = "value")

my_palette <- colorRampPalette(rev(brewer.pal(11, "Spectral")))

ggplot(dataM, aes(x=NR ,y= ASPL)) +
geom_point(size = .4,alpha = .5) +
stat_smooth(se = FALSE, size = .5) +

theme_bw() +
theme(plot.background = element_blank(),
axis.line = element_blank(),
legend.key = element_blank(),
legend.title = element_blank()) +
scale_y_continuous("ASPL", expand=c(0,0), limits = c(1, 7)) + 
scale_x_continuous("NR", expand=c(0,0), limits = c(0, 100)) +
theme(legend.position="bottom") +
theme(axis.title.x = element_text(vjust=-0.3, face="bold", size=12)) + 
theme(axis.title.y = element_text(vjust=1.5, face="bold", size=12)) +
ggtitle("Title") + theme(plot.title = element_text(lineheight=.8, face="bold")) +
theme(title = element_text(vjust=2)) +
facet_grid(NM ~ ORD)

Here's what it gives me right now:

enter image description here

Extra question: how come DEG/SF doesn't show a smooth line?

Upvotes: 0

Views: 1135

Answers (1)

ilir
ilir

Reputation: 3224

You can use the group aesthetic to define that data points with the same value of ORD belong together. You can also map aesthetics shape and color to this variable. You can also use . to specify that the facets are not split along a specific dimension.

I have made the changes to your code below after transforming NR and ASPL to numeric variables:

dataM$NR <- as.integer(dataM$NR)
dataM$ASPL <- as.numeric(dataM$ASPL)

ggplot(dataM, aes(x=NR ,y= ASPL, group=ORD, color=ORD)) +
  geom_point(size = .7,alpha = .5, aes(shape=ORD)) +  ## increased size
  stat_smooth(se = FALSE, size = .5) +
  theme_bw() +
  theme(plot.background = element_blank(),
        axis.line = element_blank(),
        legend.key = element_blank(),
        legend.title = element_blank()) +
  scale_y_continuous("ASPL", expand=c(0,0), limits = c(1, 7)) + 
  scale_x_continuous("NR", expand=c(0,0), limits = c(0, 100)) +
  theme(legend.position="bottom") +
  theme(axis.title.x = element_text(vjust=-0.3, face="bold", size=12)) + 
  theme(axis.title.y = element_text(vjust=1.5, face="bold", size=12)) +
  ggtitle("Title") + theme(plot.title = element_text(lineheight=.8, face="bold")) +
  theme(title = element_text(vjust=2)) +
  facet_grid(NM ~.)

Upvotes: 1

Related Questions