【问题标题】:How to plot values from multiple columns as discrete variables on the x axis using ggplot如何使用ggplot将来自多列的值绘制为x轴上的离散变量
【发布时间】:2021-03-27 15:38:55
【问题描述】:

我有一个结构如下的数据框

data <- data.frame(ID=c(1, 2, 3), Value1=c(0.5, 0.2, 0.8), Value2=c(0.6, 0.3, 0.8), Value3=c(0.6, 0.6, 0.6))

我想绘制它,因此我将 Value1、Value2 和 Value3 作为 X 轴上的离散变量。然后在 Y 轴上分别对应它们的值。

然后我想绘制每个ID对应的值。

我可以这样做

ggplot(data) + geom_point(aes('Value1', Value1), colour=factor(data$ID)) + geom_point(aes('Value2', Value2), colour=factor(data$ID)) + geom_point(aes('Value3', Value3), colour=factor(data$ID))

但是我现在想做的是在每个 ID 的 3 个点之间连接一条线。我曾尝试使用 geom_line(),但我不知道如何让它将这些数据视为一个系列。这似乎很简单,但我不知道如何正确地进行映射。

有人可以帮忙吗?如果有人能想出一种更有效的方法来完成第一部分,那么我也很想听听。

【问题讨论】:

    标签: r dataframe ggplot2 graph


    【解决方案1】:

    您可以通过数据透视来实现这一点。

    library(tidyverse)
    
    data %>%
      mutate(ID = factor(ID)) # so it is not treated as a continuous variable
      pivot_longer(starts_with("Value"), names_to = "Variable") %>%
      ggplot(aes(x = Variable, y = value, group = ID, color = ID)) +
      geom_line() + 
      geom_point(size = 2)
    

    【讨论】:

    • 这就是我想要的。但是,当我运行代码时,我收到此错误“错误:starts_with() 必须在 selecting 函数中使用。”我该如何解决?
    • starts_with() 是从tidyselect 包导入到tidyr (这是pivot_longer() 的来源。使用packageVersion(),这里是包的版本:tidyselect 是1.1.0 和 tidyr 是 1.1.2。如果您使用的是这些软件包的旧版本,pivot_longer() 的功能可能无法完全实现。
    • 我有 tidyselect 1.1.0 和 tidyr 1.1.3。
    • 我修好了。必须在第一个位置插入数据帧,因此 starts_with("Value") 可以解释为第二个位置的 cols 参数。 pivot_longer(data, starts_with("Value"), names_to = "Variable")
    【解决方案2】:

    如果我理解你需要 pivot_longer

    library(tidyverse)
    
    data <- data.frame(ID=c(1, 2, 3), Value1=c(0.5, 0.2, 0.8), Value2=c(0.6, 0.3, 0.8), Value3=c(0.6, 0.6, 0.6))
    
    data_longer = data %>% 
      pivot_longer(!ID, names_to = "type", values_to = "count") 
    
    ggplot(data_longer, aes(x=ID, y=count, colour = type)) +
      geom_line() +
      geom_point()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-04
      • 1970-01-01
      • 2016-05-14
      • 1970-01-01
      • 1970-01-01
      • 2020-09-04
      • 2021-11-01
      • 1970-01-01
      相关资源
      最近更新 更多