0

我有一个这样的数据集,从一个大而复杂的数据框中提取:

data_set <- data.frame("Name" = c("Mr X", "Mr Y", "Mr Z", "Mr X", "Mr Z"), "Score" = c(88, 93, 87, 89, 90))

我想创建一个按分数排序的列表图,但每个名称在需要时出现多次。以下代码不会产生所需的输出,因为我希望“X 先生”的两个分数和“Z 先生”的两个分数出现在不同的行上,而不是默认分组。什么是最干净的方法?

data_set$Name <- reorder(data_set$Name, data_set$Score, min)
ggplot(data_set) + geom_point(aes(x = Score, y = Name)) 

在此处输入图像描述

4

2 回答 2

0

我通过添加一个不重复的新因子并将标签映射到旧变量找到了这个解决方案:

data_set$ID <- as.factor(seq(1:nrow(data_set)))
ggplot(data_set) + geom_point(aes(x = Score, y = ID)) +  scale_y_discrete(labels = function(x) data_set$Name[match(x, data_set$ID)])

在此处输入图像描述

它相当丑陋,但我想不出更清洁的解决方案。

于 2021-04-27T20:22:24.783 回答
0

如果您希望它们位于不同的行中,则需要创建不同的 y 轴值。尝试 :

library(dplyr)
library(ggplot2)

data_set %>%
  group_by(Name) %>%
  mutate(Name = paste0(Name, row_number())) %>%
  ggplot() + geom_point(aes(x = Score, y = Name)) 

在此处输入图像描述

于 2021-04-26T13:47:19.760 回答