gpt4 book ai didi

r - 如何让 position_dodge 和 scale_x_date 一起工作?

转载 作者:行者123 更新时间:2023-12-04 10:42:33 28 4
gpt4 key购买 nike

我在使用 ggplot2 时遇到了以下困难。我正在尝试创建一个带有时间序列数据集的条形图,其中显示每个条形的值和 x 轴下的一个不错的日期格式。问题是:

  • 要设置在柱内或柱上方,必须使用 position_dodge 但此函数仅允许非 POSIXct 变量
  • x 轴中日期的 go-to 函数是 scale_x_date,它需要一个 POSIXct 变量

  • 我该如何解决这个问题?
    df <- data.frame(period = c("2019-01-01", "2019-02-01","2019-01-01","2019-02-01"),
    variable = c("A", "A", "B", "B"),
    value = c(100,88, 99,77))

    df$period_d <- as.POSIXct(df$period)

    这很有效(但 x 轴上没有日期)。
    ggplot(df, aes(x=period, y=value, group= variable, fill=variable))+
    geom_col(position= "dodge")+
    geom_text(aes(x=period, y=value,label=value),
    position = position_dodge(1))

    这很有效,但值(value)在错误的地方
    ggplot(df, aes(x=period_d, y=value, group= variable, fill=variable))+
    geom_col(position= "dodge")+
    scale_x_datetime(labels=date_format("%b-%y"),
    breaks = date_breaks("1 month"))

    但将两者混为一谈是失败的。如果使用 POSIXct 变量,则标签不在它们应位于的位置,如果使用字符变量,则会出现此错误消息:“无效输入:time_trans 仅适用于 POSIXct 类的对象”

    有什么想法吗?

    最佳答案

    有用于日期时间的 POSIXct 和用于日期的 Date 类(没有时间戳)。后者是离散的,因此您可以将其与条形图和闪避一起使用;前者是连续的,所以你不能。

    df$date = as.Date(df$period_d)

    ggplot(df, aes(x=date, y=value, group= variable, fill=variable))+
    geom_col(position= "dodge")+
    geom_text(aes(x=date, y=value,label=value),
    # you are drawing one set of bars for every 30 days
    # and geom_col is using the whole space by default.
    position = position_dodge(width = 30)) +
    scale_x_date()

    enter image description here

    您可以通过绘制更细的条来使其看起来更好:
    ggplot(df, aes(x=date, y=value, group= variable, fill=variable))+
    geom_col(position= "dodge", width = 5)+
    geom_text(aes(x=date, y=value,label=value),
    # you are drawing one set of bars for every 30 days
    position = position_dodge(width = 5)) +
    scale_x_date()

    IMprov

    关于r - 如何让 position_dodge 和 scale_x_date 一起工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59857137/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com