【问题标题】:print category multiple times in ggplot (no grouping)在ggplot中多次打印类别(无分组)
【发布时间】:2021-07-19 21:31:25
【问题描述】:

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

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)) 

【问题讨论】:

    标签: r ggplot2 geom-point


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的回复。我在发布之前尝试了类似的方法,但我不希望名称的写法不同(“X1 先生”、“X2 先生”……),因为这可能会被最终查看最终图表的人误解。我真的想要两份“X先生”。
    • ggplot(data_set, aes(x = Score, y = Name)) + geom_point() + geom_jitter() 怎么样?
    • 并非如此。我可以对您建议的第一个图表进行排序,但我不希望将数字附加到名称中。 y 轴应该是“Mr Z”、“Mr X”、“Mr X”、“Mr Z”、“Mr Y”,而不是“Mr Z1”、“Mr X1”、“Mr X2”、“Mr Z2”,“Y1先生”。
    【解决方案2】:

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

    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)])
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-27
      • 2021-05-24
      • 1970-01-01
      • 2021-02-12
      • 1970-01-01
      • 2017-11-27
      • 2021-08-03
      相关资源
      最近更新 更多