【问题标题】:Drawing a custom chart in R - Displaying a time log of activites在 R 中绘制自定义图表 - 显示活动的时间日志
【发布时间】:2016-06-07 01:14:36
【问题描述】:

我是R新手,所以我想知道是否可以创建如下图的图表?

我想创建一个自定义图表,显示不同人在给定时间完成的活动的持续时间。

【问题讨论】:

    标签: r visualization rcharts


    【解决方案1】:

    我想提出另一种数据格式,其中每个活动都有开始和结束时间。

    加载库。 dplyr 仅用于操作数据集,并非必需。

    library(ggplot2)
    library(dplyr)
    

    首先我们读取数据集

    activities <- read.csv2(
    text=
        "Person; Activity; Activity start; Activity end
        A; Activity 1; 10:30; 11:30
        A; Activity 2; 12:00; 13:00
        A; Activity 3; 14:00; 16:00
        B; Activity 1; 10:30; 11:30
        B; Activity 2; 11:30; 13:00
        B; Activity 3; 14:00; 14:30"
    ) %>%
        mutate(
            Activity.start = as.POSIXct(Activity.start, format="%H:%M"),
            Activity.end = as.POSIXct(Activity.end, format="%H:%M"),
            Person = as.factor(Person)
    )
    

    所以现在我们有了正确的列类,我们可以用它来绘制它

    ggplot(activities) +
        geom_rect(
            aes(
                xmin=Activity.start,
                xmax=Activity.end,
                fill=Activity,
                ymin=as.numeric(Person)-.5,
                ymax=as.numeric(Person)+.5)
            ) +
        scale_y_continuous(labels=levels(activities$Person), breaks=1:2) +
        geom_text(
            aes(x=(Activity.start + (Activity.end - Activity.start)/2), y=as.numeric(Person), label=Activity)
        ) +
        xlab(NULL) +
        ylab("Person")
    

    导致

    【讨论】:

      【解决方案2】:

      虽然这通常不是您在 R 中创建的图表类型,但您肯定可以通过足够的腿部工作来完成它。

      我认为这会让你快速入门:

      require(lubridate)
      require(ggplot2)
      
      df              <- as.data.frame(matrix(nrow=14,ncol=3))
      colnames(df)    <- c("Person", "Time", "Activity")
      df$Person       <- c("A","A","A","A","A","A", "A", 
                           "B","B","B","B","B","B", "B")
      df$Time         <- as.character(hours(c(10,11,12,13,14,15,16)))
      df$Activity     <- c(NA, "Activity 1", NA, "Activity 2", NA, "Activity 3","Activity 3",
                           NA, "Activity 1", "Activity 2", NA, NA, "Activity 3", NA)  
      
      ggplot(df, aes(Time, Person)) + geom_tile(aes(fill = Activity),
                                                     colour = "white")  +   scale_fill_manual(values = rainbow (3))
      

      您可以通过探索ggplot2 选项并进行进一步的自定义以使其更接近您绘制的图片,从而将其提升到一个新的水平。例如,您应该能够

      • 更改条的尺寸
      • 覆盖图例中的标签(geom_label 是一种方式)
      • 微调刻度线

      只需阅读并调整选项即可。我最近给出了一个关于高度定制的刻度线的答案,你可以通过快速搜索在 SO 上找到它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-09-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-17
        • 2021-06-22
        • 1970-01-01
        相关资源
        最近更新 更多