【问题标题】:ggplot2 facet_wrap geom_text not accepting date valuesggplot2 facet_wrap geom_text 不接受日期值
【发布时间】:2016-05-04 19:15:59
【问题描述】:

我有一个小的本地数据集(5 个观察值),有两种类型:a 和 b。 每个观察都有一个日期字段 (p.start)、一个比率和一个持续时间。

local

  principal    p.start duration allocated.days    ratio
1         P 2015-03-18        1       162.0000 162.0000
2         V 2015-08-28        4        24.0000   6.0000
3         V 2015-09-03        1        89.0000  89.0000
4         V 2015-03-30        1        32.0000  32.0000
5         P 2015-01-29        1       150.1667 150.1667

str(local)

'data.frame':   5 obs. of  5 variables:
 $ principal     : chr  "P" "V" "V" "V" ...
 $ p.start       : Date, format: "2015-03-18" "2015-08-28" "2015-09-03" "2015-03-30" ...
 $ duration      : Factor w/ 10 levels "1","2","3","4",..: 1 4 1 1 1
 $ allocated.days: num  162 24 89 32 150
 $ ratio         : num  162 6 89 32 150

我有另一个数据框 stats,其中包含要添加到多面图中的文本。

stats

  principal         xx    yy            zz
1         P 2015-02-28 145.8 Average = 156
2         V 2015-02-28 145.8  Average = 24

str(stats)

'data.frame':   2 obs. of  4 variables:
 $ principal: chr  "P" "V"
 $ xx       : Date, format: "2015-02-28" "2015-02-28"
 $ yy       : num  146 146
 $ zz       : chr  "Average = 156" "Average = 24"

以下代码失败:

p     = ggplot (local, aes (x = p.start, y = ratio, size = duration))
p     = p + geom_point (colour = "blue"); p
p     = p + facet_wrap (~ principal, nrow = 2); p
p     = p + geom_text(aes(x=xx, y=yy, label=zz), data= stats)
p
Error: Continuous value supplied to discrete scale

有什么想法吗?我错过了一些明显的东西。

【问题讨论】:

  • 我无法重现您的错误消息。我得到“eval 中的错误(expr,envir,enclos):找不到对象'duration'”,这是因为stats 中没有列duration。您确定您正在运行您显示的代码吗?你使用的是哪个版本的ggplot2

标签: r ggplot2 geom-text


【解决方案1】:

问题是您从 2 个 data.frames 进行绘图,但您的初始 ggplot 调用包含 aes 参数,仅引用 local data.frame。

因此,尽管您的geom_text 指定了data=stats,但它仍在寻找size=duration

以下行对我有用:

ggplot(local) +
  geom_point(aes(x=p.start, y=ratio, size=duration), colour="blue") +
  facet_wrap(~ principal, nrow=2) +
  geom_text(data=stats, aes(x=xx, y=yy, label=zz))

【讨论】:

    【解决方案2】:

    只需从ggplot (local, aes (x = p.start, y = ratio, size = duration)) 中删除size = duration 并将其添加到geom_point (colour = "blue") 中。然后,它应该可以工作了。

    ggplot(local, aes(x=p.start, y=ratio))+
    geom_point(colour="blue", aes(size=duration))+
    facet_wrap(~principal, nrow=2)+
    geom_text(aes(x=xx, y=yy, label=zz), data=stats)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-29
      • 1970-01-01
      • 2020-10-30
      • 1970-01-01
      • 2017-05-17
      • 2019-07-25
      • 1970-01-01
      相关资源
      最近更新 更多