【发布时间】:2020-06-20 21:53:19
【问题描述】:
我有一个(非常抽象地)看起来像这样的数据框。请注意,并非每个品尝者都会对每种水果进行评分。
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 创建两个图,一个用于苹果,一个用于香蕉。我想要表示评分的点,这些点需要用线连接。至关重要的是,即使 Ann 没有对香蕉进行评分,Cat 也没有对苹果进行评分,我仍然希望这两个图的 x 轴上都有所有四个评分者。在苹果图中,Bob 的评分点应该直接连接到 Don 的评分点,跳过 Cat 列。在香蕉图中,Bob、Cat 和 Don 将只有三个连接点; Ann 列中不会出现任何内容。
我可以通过分面来实现这一点,如下所示:
.
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)
如何防止这种情况发生?我尝试将具有空值的行添加到我的数据框中,但这没有帮助。
【问题讨论】: