#r
#r
Вопрос:
Мне не удается построить несколько осей в ggplot. Вот данные
df <- read.table(text = "Site Type Day1 Day2 Day3
A SD 780 431 295
B SD 350 377 255
B M 480 179 560
A M 240 876 789
C FO 840 179 NA
C FI 350 NA 255
A NF 508 NA 565
B NF 405 876 NA ", header = TRUE)
вот код
ggplot(data = df, aes(x = interaction(Type, Site, lex.order = TRUE),
y = count, group = Type))
geom_bar(colour = "blue")
annotate(geom = "text", x = Type), y = Day1, label = df$Site, size = 2)
annotate(geom = "text", x = Site, y = Day2, label = unique(df$Type), size = 8)
coord_cartesian(ylim = c(0, 850), expand = FALSE, clip = "off")
theme_bw()
theme(plot.margin = unit(c(1, 1, 4, 1), "bars"),
axis.title.x = element_blank(),
axis.text.x = element_blank(),
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank())
Это диаграмма, которую я хочу построить. Это было сделано в Excel
Ответ №1:
Я бы предложил подход, близкий к тому, что вы хотите. Вы можете изменить свои данные, а затем использовать фасеты для достижения желаемого результата. Вот код, использующий данные, которые вы включили df
:
df %>% pivot_longer(cols = -c(Site,Type)) %>%
mutate(Type = factor(Type,levels = c('SD', 'M', 'NF', 'FO', 'FI'),ordered = T)) %>%
ggplot(aes(x=Site,y=value,fill=name))
geom_bar(stat='identity')
facet_wrap(.~Type,scales = 'free_x',ncol = 5, strip.position = "bottom")
theme_minimal()
theme(strip.placement = "outside",
panel.spacing = unit(0, "points"),
strip.background = element_blank(),
strip.text = element_text(face = "bold", size = 12))
Вывод:
Комментарии:
1. Как мне сделать первый и второй столбцы одинакового размера с другими столбцами? Также как мне расположить их так, чтобы они были в этом порядке {SD, M, NF, FO, FI}?
2. @MisBlearnsR Чтобы упорядочить, вы можете добавить эту строку кода перед
ggplot
строкойmutate(Type = factor(Type,levels = c('SD', 'M', 'NF', 'FO', 'FI'),ordered = T))
. В случае размера, пожалуйста, проверьте сwidth
внутриgeom_bar()
3. В нем говорится, что не удалось найти функцию «mutate».
4. @MisBlearnsR Я отредактировал код для вас, пожалуйста, проверьте и посмотрите также, загружены ли вы
dplyr
илиtidyverse
пакеты!5. Загрузка пакетов помогла решить проблему. Удивительно, но это не сработало с моим другим набором данных.