简体   繁体   中英

R barplot using ggplot

I have data of disease and days. I have to plot a barplot for each disease and its days of infection. I tried it using . However, it combines the days for the same disease which l don't want. l am interested to plot each column for each day irrespective of disease type. l used the following code.

original_datafile <-
structure(list(disease = structure(c(1L, 2L, 
3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 5L, 6L, 6L, 6L), 
.Label = c("AA", "BB", "CC", "DD", "EE", "FF"), 
class = "factor"), days = c(5L, 5L, 9L, 2L, 
3L, 4L, 4L, 5L, 7L, 15L, 3L, 7L, 7L, 15L)), 
class = "data.frame", row.names = c(NA, -14L))  


library(ggplot2)

ggplot(data = original_datafile, aes(x = disease, y = days)) + 
  geom_bar(stat = "identity") + 
  theme(axis.text.x = element_text(angle = 40, hjust = 1))

Any suggestion would be appreciated.

here are a couple solutions that I worked up. Not 100% sure if this is what you're after, but hopefully this should get you close. To create a bar for each individual row, rather than combine them, I created a new column called id which just acts as a counter for each row for each disease. Then, I included two possible ggplot combinations that I believe get close to what you're after.

original_datafile <-
  structure(list(disease = structure(c(1L, 2L, 
                                       3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 5L, 6L, 6L, 6L), 
                                     .Label = c("AA", "BB", "CC", "DD", "EE", "FF"), 
                                     class = "factor"), days = c(5L, 5L, 9L, 2L, 
                                                                 3L, 4L, 4L, 5L, 7L, 15L, 3L, 7L, 7L, 15L)), 
            class = "data.frame", row.names = c(NA, -14L))  


library(ggplot2)

# Modified data file adds an 'id' column to split each row individually.

modified_datafile <- original_datafile %>% 
                        group_by(disease) %>% 
                        mutate(id = row_number())

# Facetted ggplot - each disease has its own block

ggplot(data = modified_datafile, aes(x = id, y = days)) + 
  geom_bar(stat = 'identity', position = 'dodge') + 
  theme(axis.text.x = element_text(angle = 40, hjust = 1)) +
  facet_wrap(. ~ disease, nrow = 2) +
  theme(axis.text.x = element_blank()) +
  labs(x = '', y = 'Days')

# Non facetted ggplot - closer to original, but each row has a bar.

ggplot(data = modified_datafile, aes(x = disease, y = days, group = id)) + 
  geom_bar(stat = 'identity', position = position_dodge2(preserve = 'single')) + 
  theme(axis.text.x = element_text(angle = 40, hjust = 1))

在此处输入图片说明

在此处输入图片说明

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM