【问题标题】:Improper facet_wrap output不正确的 facet_wrap 输出
【发布时间】:2018-01-26 07:06:43
【问题描述】:

以下是我的示例数据

尽管在所有 4 个日期中都有针对移动设备和平板电脑的值,但当我尝试跨设备类别进行 facet_wrap 时,我的结果不是预期的。每个日期对应的所有值都只添加到桌面,不会分布在 3 个类别中。

我使用的代码是

qplot(data=gaData, x=gaData$Date, y=gaData$Users, xlim = c(20170101,20170101))+
  facet_wrap(~gaData$Device.Category, ncol = 1)

我在图中看到的输出是

我是整个数据可视化领域的新手。我无法确定代码有什么问题。

附:我能够成功地在同一日期单独绘制手机和平板电脑作为单独的情节。

【问题讨论】:

  • 图片不是代码/数据,除非主题是图像处理。 dput() 建议在r tag info 中使用。目标是帮助他人帮助您。

标签: r ggplot2 facet-wrap


【解决方案1】:
x <- data.frame(Date = c('2017-01-01','2017-01-01','2017-01-01','2017-01-02','2017-01-02','2017-01-02','2017-01-03','2017-01-03','2017-01-03',
                         '2017-01-04','2017-01-04','2017-01-04'), Device = c("desktop","mobile","tablet","desktop","mobile","tablet",
                                                                             "desktop","mobile","tablet","desktop","mobile","tablet"),
                Users = c(404,223,39,529,211,43,1195,285,29,1019,275,35))
x$Date <- as.POSIXct(x$Date, tz = "UTC")

ggplot(x, aes(Date, Users)) + geom_line() + facet_wrap(~Device)

这是你想要的吗?

【讨论】:

    【解决方案2】:

    希望这会有所帮助。

    # Simulate some dummy data
    dat <- data.frame(
        Date = rep(20170101:20170104, each = 3),
        Device = rep(c('D', 'M', 'T'), 4),
        Users = runif(n = 12, max = 1000, min = 10) %>% round()
    )
    
    # This is the 'base map', map variables onto aesthetics
    ggplot(aes(x = Date, y = Users, col = Device), data = dat) + 
        # What kind of geometry?
        geom_line() +
        geom_point() +
        # From 1d panel to 2d
        facet_wrap(~Device, ncol = 1)
    

    Plot Result

    您也可以考虑将Date 变量转换为date 类。

    以下参考资料希望能帮助你对ggplot2有所了解。

    1. http://tutorials.iq.harvard.edu/R/Rgraphics/Rgraphics.html
    2. http://r-statistics.co/Complete-Ggplot2-Tutorial-Part1-With-R-Code.html
    3. http://ggplot2.tidyverse.org/reference/

    另外,DataCamp 提供了精彩的在线教程。

    欢迎来到 R. Cheers 的奇妙世界。

    【讨论】:

    • 不错的答案,但请包括您使用的软件包。
    • 和我的回答有什么不同?
    【解决方案3】:

    首先我建议您将“日期”转换为 POSIXct。我使用 lubridate 包:

    library(lubridate)
    Date=ymd(c(rep("2017-01-01",3),rep("2017-01-02",3),rep("2017-01-03",3),rep("2017-01-04",3)))
    

    然后我们可以构建数据框架的其余部分

    Country=rep("United States",12)
    Device.Category=rep(c("Desktop","Mobile","Tablet"),4)
    Users=c(404,223,39,529,211,43,1195,285,29,1019,275,35)
    df=data.frame(Date,Country,Device.Category,Users)
    

    如果您只想为“2017-01-01”绘图,请使用此

    ggplot(df,aes(x=Date,y=Users))+geom_point()+facet_grid(Device.Category~.)+xlim(ymd("2017-01-01"),ymd("2017-01-01"))
    

    或者如果您想要所有日期,只需删除 xlim 函数

    ggplot(df,aes(x=Date,y=Users))+geom_point()+facet_grid(Device.Category~.)+xlim(ymd("2017-01-01"),ymd("2017-01-01"))
    

    【讨论】:

      猜你喜欢
      • 2016-07-04
      • 1970-01-01
      • 1970-01-01
      • 2022-11-03
      • 2021-03-05
      • 2015-01-08
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      相关资源
      最近更新 更多