首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >facet_wrap,facet_grid -在facet中使用日期类型

facet_wrap,facet_grid -在facet中使用日期类型
EN

Stack Overflow用户
提问于 2013-10-17 09:43:35
回答 1查看 2.7K关注 0票数 4

考虑以下简单示例:

代码语言:javascript
复制
df <- data.frame(
  a = rep(c('a','b','c'),3),
  b = as.Date(rep(c('2011-01-01','2011-02-01','2011-03-01'),3)),
  c = rnorm(9),
  d = rep(1:3,each=3)
  )

str(df)

ggplot(df, aes(x=d, y=c)) + geom_line(aes(group=b)) + facet_wrap(~a)

ggplot(df, aes(x=d, y=c)) + geom_line(aes(group=a)) + facet_wrap(~b)

第二个ggplot失败时出现了错误:

代码语言:javascript
复制
Error in scale_apply(layer_data, x_vars, scale_train, SCALE_X, panel$x_scales) : 

In addition: Warning message:
In `[<-.factor`(`*tmp*`, rng, value = c(1L, 2L, 3L, 1L, 2L, 3L,  :
  invalid factor level, NA generated

当我将b列(日期)转换为字符时,它的工作原理是:

代码语言:javascript
复制
df$b <- as.character(df$b)
ggplot(df, aes(x=d, y=c)) + geom_line(aes(group=a)) + facet_wrap(~b)

我可以将任何其他数据类型传递给facet_wrap,但日期除外:

代码语言:javascript
复制
df <- data.frame(
  a = rep(1:3,3),
  b = rep(1:3,each=3),
  c = rnorm(9),
  f = rep(c('a','b','c'),3), 
  g = as.logical(rep(c(TRUE,FALSE,TRUE),3)), 
  h = as.integer(rep(c(1,2,3),3)), 
  i = rep(c(0.5,1.0,1.5),3),
  j = as.factor(rep(c('a','b','c'),3)),
  k = as.complex(rep(c(1,2,3),3)),
  l = as.Date(rep(c('2011-01-01','2011-02-01','2011-03-01'),3))  
  )

str(df)

ggplot(df, aes(x=b, y=c)) + geom_line(aes(group=a)) + facet_wrap(~f) # Character
ggplot(df, aes(x=b, y=c)) + geom_line(aes(group=a)) + facet_wrap(~g) # Boolean
ggplot(df, aes(x=b, y=c)) + geom_line(aes(group=a)) + facet_wrap(~h) # Integer
ggplot(df, aes(x=b, y=c)) + geom_line(aes(group=a)) + facet_wrap(~i) # Numeric
ggplot(df, aes(x=b, y=c)) + geom_line(aes(group=a)) + facet_wrap(~j) # Factor
ggplot(df, aes(x=b, y=c)) + geom_line(aes(group=a)) + facet_wrap(~k) # Complex
ggplot(df, aes(x=b, y=c)) + geom_line(aes(group=a)) + facet_wrap(~l) # Date

是否有一种方法可以将日期列传递给facet_wrapfacet_grid,而不必先将该列转换为字符/因子?

R版本3.0.2 (2013-09-25) ggplot2_0.9.3.1

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-17 10:44:17

通常,我们使用factor来分割面板。对于方面,您有一个约束。

至少一个层必须包含用于面设置的所有变量“

因此,您可以将b转换为一个因子,或者如果您想保留它,可以使用它创建一个新的因子列。

代码语言:javascript
复制
ggplot(data.frame(df,h = as.factor(df$b)), aes(x=d, y=c)) + 
  geom_line(aes(group=a)) + 
  facet_wrap(~h)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19423228

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档