0

Figure1. Interactions from df1

Figure2. Interactions from df2

The order of my Genes are being swapped. I would ideally like the mRNA (C or R) to come before the miRNA but as Figure1 (R:miRNA1 Expression) shows in some cases the order is swapped. Below I have added the dataframes and code which were used to create Figure1 and Figure2, respectively.

df1 <- structure(list(R = c(-1.14250840373484, -1.02133830125996, 0.553311226987293, 
                             0.649580480526957, 0.960954997480556),
                     miRNA1 = c(1.39724430765698, 0.649024751983948, -0.36832537544742, 
                             -1.04276601543279, -0.635177668760717),
                    Time = c(1L, 3L, 6L, 10L, 14L)), 
                    class = "data.frame", row.names = c(NA, 5L))

df2 <- structure(list(C = c(-1.34260625841716, -0.587744704056962, 0.134415861797786,
                            0.565397609657598, 1.23053749101874),
                      miRNA2 = c(-1.10103340686835,-1.02891995290153, 1.09002231659813, 
                                  0.510685717630627, 0.529245325541117), 
                     Time = c(1L, 3L, 6L, 10L, 14L)), 
                     class = "data.frame", row.names = c(NA, 5L))




X <- as.data.frame(df1) # To create Figure1
x <- as.data.frame(df2) # To create Figure2
rownames(X) <- X$Time
X$Time <- NULL
Melted <- melt(as.matrix(X), varnames = c("Time", "Gene"))
colnames(Melted)[3] <- "Expression"
miR <- as.character(unique(Melted$Gene)[[1]])
mRNA <- as.character(unique(Melted$Gene)[[2]])
ggplot(Melted, aes(x = Time, y = Expression, group = Gene, color = Gene)) +
    geom_line(data = ~subset(., Gene == paste(mRNA)), size = 2) +
    geom_line(data = ~subset(., Gene == paste(miR)), size = 2) + 
    scale_colour_manual(values = c("orange", "purple")) + 
    theme_classic() + 
    labs(title = paste0(miR, ":", mRNA, " Expression"), x = "Time", y = "Expression", 
    subtitle = paste0("")) + 
    theme(plot.title = element_text(size = 20, face = "bold",
                                    hjust = 0.5), 
          axis.text.x = element_text(size = 15), 
          axis.text.y = element_text(size = 15),
          axis.title.x = element_text(size = 20),
          axis.title.y = element_text(size = 20),
          legend.text = element_text(size = 12)) + 
    theme(plot.subtitle = element_text(size = 25, hjust = 1.2, face = "italic",
                                       color = "black"))
Krutik
  • 461
  • 4
  • 13

2 Answers2

2

Before plotting the object, you can define Gene as a factor and define the levels by including Melted$Gene <- factor(Melted$Gene, levels = c("R", "miRNA1")).

X <- as.data.frame(df1) # To create Figure1
x <- as.data.frame(df2) # To create Figure2
rownames(X) <- X$Time
X$Time <- NULL
Melted <- melt(as.matrix(X), varnames = c("Time", "Gene"))
Melted$Gene <- factor(Melted$Gene, levels = c("R", "miRNA1")) # define order/levels
colnames(Melted)[3] <- "Expression"
miR <- as.character(unique(Melted$Gene)[[1]])
mRNA <- as.character(unique(Melted$Gene)[[2]])

Then, by simplifying the geom_line(), it will order them accordingly.

ggplot(Melted, aes(x = Time, y = Expression, group = Gene, color = Gene)) +
  geom_line(size = 2) + # simplified
  scale_colour_manual(values = c("orange", "purple")) + 
  theme_classic() + 
  labs(title = paste0(miR, ":", mRNA, " Expression"), x = "Time", y = "Expression", 
       subtitle = paste0("")) + 
  theme(plot.title = element_text(size = 20, face = "bold",
                                  hjust = 0.5), 
        axis.text.x = element_text(size = 15), 
        axis.text.y = element_text(size = 15),
        axis.title.x = element_text(size = 20),
        axis.title.y = element_text(size = 20),
        legend.text = element_text(size = 12)) + 
  theme(plot.subtitle = element_text(size = 25, hjust = 1.2, face = "italic",
                                     color = "black"))

Output:

enter image description here

However, please note that I am not sure how you obtain time 1:5 on the x-axis, since it is 1, 3, 6, 10, 14 in the data you posted.

Timon
  • 123
  • 1
  • 1
  • 6
  • Thanks. Both answers worked however @Timon's solution used the least amount of changes to was easiest to implements. – Krutik Apr 23 '21 at 10:56
1

You can use a less messy code like

library(tidyverse)

df1 <- structure(list(R = c(-1.14250840373484, -1.02133830125996, 0.553311226987293, 
                            0.649580480526957, 0.960954997480556),
                      miRNA1 = c(1.39724430765698, 0.649024751983948, -0.36832537544742, 
                                 -1.04276601543279, -0.635177668760717),
                      Time = c(1L, 3L, 6L, 10L, 14L)), 
                 class = "data.frame", row.names = c(NA, 5L))

df2 <- structure(list(C = c(-1.34260625841716, -0.587744704056962, 0.134415861797786,
                            0.565397609657598, 1.23053749101874),
                      miRNA2 = c(-1.10103340686835,-1.02891995290153, 1.09002231659813, 
                                 0.510685717630627, 0.529245325541117), 
                      Time = c(1L, 3L, 6L, 10L, 14L)), 
                 class = "data.frame", row.names = c(NA, 5L))

df1 %>% 
  pivot_longer(-Time, values_to = "Expression", names_to = "Gene") %>% 
  mutate(Gene =  factor(Gene, levels = c("miRNA1", "R"))) %>% 
  ggplot(aes(x = Time, y = Expression, group = Gene, color = Gene)) +
  geom_line(size = 2) +
  scale_colour_manual(values = c("orange", "purple")) + 
  theme_classic() + 
  labs(title = "R:mRNA1 Expression", x = "Time", y = "Expression", 
       subtitle = paste0("")) + 
  theme(plot.title = element_text(size = 20, face = "bold",
                                  hjust = 0.5), 
        axis.text.x = element_text(size = 15), 
        axis.text.y = element_text(size = 15),
        axis.title.x = element_text(size = 20),
        axis.title.y = element_text(size = 20),
        legend.text = element_text(size = 12)) + 
  theme(plot.subtitle = element_text(size = 25, hjust = 1.2, face = "italic",
                                     color = "black"))
df2 %>% 
  pivot_longer(-Time, values_to = "Expression", names_to = "Gene") %>% 
  mutate(Gene =  factor(Gene, levels = c("miRNA2", "C"))) %>% 
  ggplot(aes(x = Time, y = Expression, group = Gene, color = Gene)) +
  geom_line(size = 2) +
  scale_colour_manual(values = c("orange", "purple")) + 
  theme_classic() + 
  labs(title = "C:mRNA2 Expression", x = "Time", y = "Expression", 
       subtitle = paste0("")) + 
  theme(plot.title = element_text(size = 20, face = "bold",
                                  hjust = 0.5), 
        axis.text.x = element_text(size = 15), 
        axis.text.y = element_text(size = 15),
        axis.title.x = element_text(size = 20),
        axis.title.y = element_text(size = 20),
        legend.text = element_text(size = 12)) + 
  theme(plot.subtitle = element_text(size = 25, hjust = 1.2, face = "italic",
                                     color = "black"))

enter image description here

enter image description here

UseR10085
  • 7,120
  • 3
  • 24
  • 54