Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Bars do not get the color tried to give to them in a barplot

How to make all the bars blue except from the year 2005 that is red. My code doesn’t do it. Is there a way to do this without specifying the color for every year in the data frame?

df <- data.frame(
  Body_part = sample(c("Head", "Arm", "Leg", "Torso"), 1000, replace = TRUE),
  Year = as.factor(sample(2003:2021, 1000, replace = TRUE))
)

ggplot(df, aes(x = fct_rev(fct_infreq(Body_part)), fill = Year)) +
  geom_bar(position = "dodge", stat = "count") +
  scale_fill_manual(values = c("blue", "2005" = "red")) +
  theme_light() +
  labs(title = "",
       x = "",
       y = "Count") +
  coord_flip()

enter image description here

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

>Solution :

From ?scale_fill_manual:

  values: a set of aesthetic values to map data values to. The values
          will be matched in order (usually alphabetical) with the
          limits of the scale, or with ‘breaks’ if provided. If this is
          a named vector, then the values will be matched based on the
          names instead. Data values that don't match will be given
          ‘na.value’.

Noteworth is the na.value reference.

ggplot(df, aes(x = fct_rev(fct_infreq(Body_part)), fill = Year)) +
  geom_bar(position = "dodge", stat = "count") +
  scale_fill_manual(values = c("2005" = "red"), na.value = "blue") +
  theme_light() +
  labs(title = "",
       x = "",
       y = "Count") +
  coord_flip()

enter image description here

Note that neither your plot nor this will show years other than "2005" in the legend. An alternative that at least gives a hint about the others:

transform(df, Year2 = ifelse(as.character(Year) == "2005", "2005", "Other")) |>
  ggplot(aes(x = fct_rev(fct_infreq(Body_part)),
             group = Year, fill = Year2)) + ## notice the changes here
  geom_bar(position = "dodge", stat = "count") +
  scale_fill_manual(name = "Year", values = c("2005"="red", "Other"="blue")) +
  theme_light() +
  labs(title = "",
       x = "",
       y = "Count") +
  coord_flip()

enter image description here

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading