0

I'm trying to show 4 colored dots underneath the plot, but they show partially, what should I do to fix it?

enter image description here

I tried to change this part of the code, but it wasn't helpful:

library(repr, warn.conflicts = FALSE)
options(repr.plot.width=5, repr.plot.height=8.5)

I tried @Alexlok suggestion, it worked nice, but the dots are overlapping with the plot, how to separate them from the plot:

enter image description here

This is my plot code:

library(dplyr, warn.conflicts = FALSE)
library(tidyverse, warn.conflicts = FALSE)
library(stringr, warn.conflicts = FALSE)
library(matrixStats, warn.conflicts = FALSE)
library(pheatmap, warn.conflicts = FALSE)
library(heatmaps, warn.conflicts = FALSE)
library(ggplot2, warn.conflicts = FALSE)

dfc <- read.csv(url("https://github.com/learnseq/learning/raw/main/GSE133399_Fig2_FPKM.csv"))

values <- c('S100a10', 'Esm1', 'Itgb1', 'Anxa2', 'Hist1h1b', 
                                                'Il2rb', 'Lgals1', 'Mki67', 'Rora', 'S100a4', 
                                                'S100a6', 'Adam8', 'Areg', 'Bcl2l1', 'Calca', 
                                                'Capg', 'Ccr2', 'Cd44', 'Csda', 'Ehd1', 
                                                'Id2', 'Il10', 'Il1rl1', 'Il2ra', 'Lmna', 
                                                'Maf', 'Penk', 'Podnl1', 'Tiam1', 'Vim',
                                                'Ern1', 'Furin', 'Ifng', 'Igfbp7', 'Il13', 
                                                'Il4', 'Il5', 'Nrp1', 'Ptprs', 'Rbpj', 
                                                'Spry1', 'Tnfsf11', 'Vdr', 'Xcl1', 'Bmpr2', 
                                                'Csf1', 'Dst', 'Foxp3', 'Itgav', 'Itgb8', 
                                                'Lamc1', 'Myo1e', 'Pmaip1', 'Prdm1', 'Ptpn5', 
                                                'Ramp1', 'Sdc4')

dfg <- dfc %>% slice(match(rev(values), tracking_id))

dfg$CD44low_rep <- rowMeans(dfg[,c('CD44low_rep1', 'CD44low_rep2')], na.rm=TRUE)
dfg$CD44hi_CD69low_rep <- rowMeans(dfg[,c('CD44hi_CD69low_rep1', 'CD44hi_CD69low_rep2')], na.rm=TRUE)
dfg$CD44hi_CD69hi_CD103low_rep <- rowMeans(dfg[,c('CD44hi_CD69hi_CD103low_rep1', 'CD44hi_CD69hi_CD103low_rep2')], na.rm=TRUE)
dfg$CD44hi_CD69hi_CD103hi_rep <- rowMeans(dfg[,c('CD44hi_CD69hi_CD103hi_rep1', 'CD44hi_CD69hi_CD103hi_rep2')], na.rm=TRUE)
rownameshm <-paste(dfg[,1])
colnameshm <- paste(dQuote(colnames(dfg[0, 10:13])), collapse = ", ")
dfg$Mean <- rowMeans(dfg[,10:13])
dfg$sd <- rowSds(as.matrix(dfg[,10:13]))

zScore <- function(p){
for(n in 10:13){
    p[[n]]=(as.numeric(p[[n]])-as.numeric(p[[14]]))/as.numeric(p[[15]])
    }
return(p)
}

Matrix_zScore <- t(apply(dfg,1,zScore))

Matrix_zScore_temp <- mapply(Matrix_zScore[,10:13], FUN=as.numeric)
Matrix_zScore_temp <- matrix(data=Matrix_zScore_temp, ncol=4, nrow=57)
Matrix_zScore_temp1<-as.data.frame(Matrix_zScore_temp)

rownames(Matrix_zScore_temp) <- dfg$tracking_id
plot_frame <- reshape2::melt(Matrix_zScore_temp)


library(repr, warn.conflicts = FALSE)
options(repr.plot.width=5, repr.plot.height=8.5)

ggplot(plot_frame, aes(Var2, Var1, fill = value)) + 
  geom_tile(color = "white", position = position_dodge(), show.legend = TRUE) +
  geom_point(data = data.frame(Var2 = 1:4, Var1 = 0, value = 0), size = 5,
           aes(color = factor(Var2))) +
  geom_point(data = data.frame(Var2 = 1:4, Var1 = 0, value = 1), alpha = 0) +
  scale_color_manual(values = c("black", "forestgreen", "#DE2D29", "#3C57A8"),
                     labels = c(expression(
                         CD44^{lo}~"T Cells",
                         CD44^{hi}~CD69^{lo}~"T Cells",
                         CD44^{hi}~CD69^{hi}~CD103^{lo}~"T Cells",
                         CD44^{hi}~CD69^{hi}~CD103^{hi}~"T Cells")),
                     guide = guide_legend(override.aes = list(fill = NA), label.hjust = 0, position="bottom", size = 5 )) +

  scale_y_discrete(position = "right") +
  labs(y = "", fill = "", color = " ", x = "")  +
  scale_fill_gradientn(colors = c("#3C57A8", "white", "#DE2D29"),
                       breaks = c(1.5, 0, -1.5),
                       labels = c("1.0", "0", "-1.0"),
                       limits = c(-1.5, 1.5),
                       space = "Lab",
                       guide = "colourbar",
                       aesthetics = "fill") +
  theme_minimal() + guides(colour=FALSE) +
theme (panel.grid.major = element_blank(), 
       axis.text.y.right = element_text(margin = margin(l = unit(-5, "cm"))),
       axis.text.y = element_text(face="italic", size=9, 
                                 color="black"),
  #     axis.x.label = label(margin = margin(l = unit(-5, "cm"))),
       legend.justification = c(-0.9, 0),
       legend.direction = "vertical",
       legend.key.size = unit(0.6, "cm"),
       legend.key.width = unit(0.2,"cm"),
       legend.title.align = 0.5,
       axis.text.x = element_blank(),plot.margin = unit(c(1,1,5,1), "lines")) +
guides(
        fill = guide_colourbar(
            title = "Relative gene expression \n (z score)",
            title.position = "right",
            title.theme = element_text(angle = -90, size = 7.5),
            direction = "vertical",
            ticks = FALSE)) +
coord_cartesian( # This focuses the x-axis on the range of interest
                      clip = 'off') 

user432797
  • 593
  • 4
  • 13
  • 1
    In `theme()` you can try adding `plot.margin=`, and desactivate clipping with `coord_cartesian(clip="off")`, as e.g. [here](https://stackoverflow.com/questions/12409960/ggplot2-annotate-outside-of-plot/12417481). – Alexlok Nov 18 '20 at 03:00
  • I just tried it, it increases the area around the plot, but the plot is still showing partially @Alexlok I tried `plot.margin = unit(c(1,1,5,1), "lines")` with different combinations – user432797 Nov 18 '20 at 03:16
  • 1
    Did you try without clipping? Sorry, I edited my comment, I had forgotten it at first. – Alexlok Nov 18 '20 at 03:21
  • I just did, it worked, but the dots are overlapping! any input @Alexlok, thank you so much! I will update the question – user432797 Nov 18 '20 at 03:33
  • 1
    Seems to work with `Var1 = -1` instead of `Var1 = 0` in defining the `geom_point()`. Doesn't seem very clean though, but not sure I have a better solution. PS: adjusting the margins of the plot may not have been necessary, deactivating the clipping might be enough. – Alexlok Nov 18 '20 at 04:01

0 Answers0