У меня есть фрейм данных, который (очень абстрактно) выглядит так. Обратите внимание, что не каждый дегустатор оценил каждый фрукт.
df <- data.frame(
fruit = c("apple", "apple", "apple", "banana", "banana", "banana"),
taster = c("Ann", "Bob", "Don", "Bob", "Cat", "Don"),
rating = c(8, 7, 4, 6, 3, 7)
)
Я хочу создать два графика, используя ggplot2
, один для яблок и один для бананов. Я хочу, чтобы баллы указывали на рейтинги, и эти точки нужно соединять линиями. Важно отметить, что даже несмотря на то, что Энн не оценивала бананы, а Кот не оценивал яблоки, я все же хочу, чтобы на обоих графиках были все четыре оценки по оси x. На графике яблока точка рейтинга Боба должна быть напрямую связана с точкой рейтинга Дона, пропуская столбец «Кошка». В банановом сюжете будет просто три связанных точки для Боба, Кота и Дона; в столбце Ann ничего не будет.
Я могу выполнить sh это фасетированием, например:
этот .
plot_facet <- ggplot(df, aes(x = taster, y = rating, col = fruit, group = fruit)) +
geom_point() + geom_line() +
scale_color_manual(values=c("#123456", "#abcdef")) +
facet_grid(fruit ~ .)
Однако по сложной независимой причине я не хочу использовать фасетирование . Скорее, я хочу сделать два отдельных графика и сшить их вместе (например) ggarrange()
. Но когда я это сделаю, результат будет:
Столбец Ann исключен из бананового графа, а столбец Cat из яблочного графа. Что мне не нравится в этом, так это то, что трудно визуально сравнить оценки одного человека за два фрукта.
plot_apple <- ggplot(subset(df, fruit == "apple"),
aes(x = taster, y = rating, col = fruit, group = fruit)) +
geom_point() + geom_line() +
scale_color_manual(values=c("#123456"))
plot_banana <- ggplot(subset(df, fruit == "banana"),
aes(x = taster, y = rating, col = fruit, group = fruit)) +
geom_point() + geom_line() +
scale_color_manual(values=c("#abcdef"))
ggarrange(plot_apple, plot_banana, ncol = 1, nrow = 2)
Как мне предотвратить это? Я пробовал добавлять в свой фрейм данных строки с пустыми значениями, но это не помогло.