【问题标题】:Using ggplot2 to create a line chart showing spread between two variables in each observation使用 ggplot2 创建一个折线图,显示每个观察值中两个变量之间的分布
【发布时间】:2017-06-02 00:49:42
【问题描述】:

这是我的数据:

   Assignment first Stage  Grade Type
1        PA06  98.5 final  98.50   PA
2        PA06  98.5 final  98.50   PA
3        PA06  83.0 final  83.00   PA
4        PA06 100.0 final 100.00   PA
5        PA06 100.0 final 100.00   PA
6        PA06  98.5 final  98.50   PA
7        PA06  86.0 final  86.00   PA
8        PA06 100.0 final 100.00   PA
9        PA06  84.5 final  88.00   PA
10       PA06  95.0 final  95.00   PA
11       PA06  83.0 final  90.00   PA
12       PA06   0.0 final   6.75   PA

我在想我想要一个沿 x 轴观察的图表,显示一条从“first”开始到“Grade”结束的垂直线。

请注意,通常 first 和 Grade 将相等,在这种情况下,我只得到一个点。否则,我会在每一端得到一条带点的线。而且我不想在 x 轴上添加任何标签。

这可能有点奇怪,但我正在试验我的数据。我认为它应该“容易”,但我似乎无法理解。到目前为止,这是我尝试过的:

ggplot(x2, aes(x=first, y=Grade)) + geom_line()
ggplot(x2, aes(x=email)) + geom_point(aes(y=Grade, col="blue")) + geom_point(aes(y=first, col="red"))

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    使用ggalt 包中的geom_dumbbell()

    mydf$case <- 1:nrow(mydf)
    
    library(ggplot2)
    library(ggalt)
    
    ggplot(mydf, aes(first, case, xend = Grade)) +
       geom_dumbbell(size_x = 2, size_xend = 2) +
       coord_flip() +
       theme(axis.ticks.x = element_blank(),
             axis.text.x = element_blank(),
             axis.title.x = element_blank()) 
    

    数据:

    mydf <- read.table(text="Assignment first Stage  Grade Type
    1        PA06  98.5 final  98.50   PA
    2        PA06  98.5 final  98.50   PA
    3        PA06  83.0 final  83.00   PA
    4        PA06 100.0 final 100.00   PA
    5        PA06 100.0 final 100.00   PA
    6        PA06  98.5 final  98.50   PA
    7        PA06  86.0 final  86.00   PA
    8        PA06 100.0 final 100.00   PA
    9        PA06  84.5 final  88.00   PA
    10       PA06  95.0 final  95.00   PA
    11       PA06  83.0 final  90.00   PA
    12       PA06   0.0 final   6.75   PA", header = TRUE)
    

    【讨论】:

    • 我似乎无法使用 Studio 安装 ggalt。在 Mac 上,我想我会看到编译错误...
    【解决方案2】:
    # Load package
    library(tidyverse)
    library(data.table)
    
    # Create example data frame
    dt <- fread("Assignment first Stage  Grade Type
    PA06  98.5 final  98.50   PA
                PA06  98.5 final  98.50   PA
                PA06  83.0 final  83.00   PA
                PA06 100.0 final 100.00   PA
                PA06 100.0 final 100.00   PA
                PA06  98.5 final  98.50   PA
                PA06  86.0 final  86.00   PA
                PA06 100.0 final 100.00   PA
                PA06  84.5 final  88.00   PA
                PA06  95.0 final  95.00   PA
                PA06  83.0 final  90.00   PA
                PA06   0.0 final   6.75   PA")
    
    # Preprocess the data
    dt2 <- dt %>%
      # Add ID
      mutate(ID = 1:n()) %>%
      # Reshape the data
      gather(Class, Score, first, Grade)
    
    # Plot the data
    dt2 %>%
      ggplot(aes(x = factor(ID), y = Score)) +
      geom_point(aes(colour = Class)) +
      geom_line(aes(group = ID)) +
      scale_x_discrete(name = "")
    

    【讨论】:

    • 很好......但我不明白在收集调用中,您使用的是一个名为 Class 的列名,但前面的数据中没有这样的列。你能解释一下吗@yow
    • gather 函数将数据帧从宽格式转换为长格式。用户需要指定keyvalue 对。在这种情况下,Class 是我将为dt2 创建的新列的名称,Scoredt2 中另一个新列的名称。函数调用的其余部分是指定我将使用哪些列进行键值转换。 Class 的内容是我在dt 中指定的列中的列名,在本例中为firstGradeScore的内容来自firstGrade的内容。
    • 也许通过一些视觉演示更容易理解。请参阅本教程 (rpubs.com/bradleyboehmke/data_wrangling) 以了解有关 gathertidyr 包的更多信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-28
    • 1970-01-01
    • 2012-09-08
    • 2022-01-11
    • 1970-01-01
    • 2021-11-20
    • 1970-01-01
    相关资源
    最近更新 更多