angel_30
angel_30

Reputation: 1

How to group plot colors in R

I have a plot in R using ggplot, say like the following. How can I group the plot colors, like all Control having same color, and the Treated having another color? So basically only two different colors total. Probably I need to use group aesthetics to do this.

Here is the data file. Here is the code:

{r}
growth_data_long <- growth_data %>% pivot_longer(-`animal`, 
                                   names_to=("Day"),
                                   values_to=("Growth"))

growth_data_long
{r}
growth_data_long %>% ggplot(aes(Day,Growth, group= animal)) + aes(color=animal) +geom_line()+
  geom_point()

enter image description here

Upvotes: 1

Views: 1950

Answers (2)

jared_mamrot
jared_mamrot

Reputation: 26515

Edit

Here is a solution without using the tidyverse package:

library(ggplot2)
library(tidyr)

growth_data <- read.csv("~/Downloads/growth_data.txt", sep = "\t")
growth_data_long <- growth_data %>% pivot_longer(-`animal`, 
                                                 names_to=("Day"),
                                                 values_to=("Growth"))

growth_data_long
#> # A tibble: 60 × 3
#>    animal    Day   Growth
#>    <chr>     <chr>  <dbl>
#>  1 Control 1 Day.1   1.08
#>  2 Control 1 Day.2   1.49
#>  3 Control 1 Day.3   2.73
#>  4 Control 1 Day.4   2.81
#>  5 Control 1 Day.5   3.8 
#>  6 Control 1 Day.6   4.8 
#>  7 Control 2 Day.1   1.22
#>  8 Control 2 Day.2   1.86
#>  9 Control 2 Day.3   2.01
#> 10 Control 2 Day.4   2.53
#> # … with 50 more rows

growth_data_long$group <- gsub(x = growth_data_long$animal, pattern = " \\d+", replacement = "")


ggplot(growth_data_long, aes(x = Day, y = Growth, group = animal, color = group)) +
  geom_line() +
  geom_point()

Created on 2021-10-06 by the reprex package (v2.0.1)

Upvotes: 2

Tjn25
Tjn25

Reputation: 705

You can separate your animal column so that you get the label for control or treat.

library(tidyr)
growth_data_long <- growth_data_long %>% separate(animal, into = c("group", NA), sep = " ", remove = F)

Then produce the graph the same way as before changing color=animal to color=group.

growth_data_long %>% ggplot(aes(Day,Growth, group= animal)) + aes(color=group) +geom_line()+
  geom_point()

Upvotes: 1

Related Questions