facet_grid贴标机两行

时间:2017-01-24 11:53:17

标签: r ggplot2

我想在labeller包的facet_grid中使用ggplot2参数(和函数),以便一个轴上的多个标签彼此相对,而不是在旁边彼此。

在下面的可重复示例中,我想让标签在相同的标签框中标明公司名称及其下方的部门。即 ' ABC Ltd \ nAAAAAAAA'和' DEF plc \ nAAAAAAAA'和' GHI LLP \ nBBBBBBBBB'对于y轴小平面标签。理想情况下,我想将此扩展到下面的多个附加标签描述。

require(ggplot2)
require(reshape2)
require(dplyr)

dat <- data.frame(date=Sys.Date()+seq(1000),
                  stock_px_1=100*cumprod(c(1,1+rnorm(999,0.00003,0.0004))),
                  stock_px_2=500*cumprod(c(1,1+rnorm(999,0.00001,0.0003))),
                  stock_px_3=10*cumprod(c(1,1+rnorm(999,0.00005,0.0005))))

stock_info <- data.frame(px_name=paste0('stock_px_',seq(3)),
                         stock_id=c('a1b2c3','d4e5f6','g7h8i9'),
                         sector=c('AAAAAAAA','AAAAAAAA','BBBBBBBBB'),
                         long_name=c('ABC Ltd','DEF plc','GHI LLP'))


dat_melted <- melt(dat,id.vars='date',variable.name='px_name',value.name='price')

joined_dat <- left_join(dat_melted,stock_info,by='px_name')

ggplot(joined_dat,aes(x=date,y=price,color=px_name))+
  geom_path()+
  facet_grid(long_name+sector~.,scales='free_y')+
  theme(strip.text.y=element_text(angle=0))+
  theme(legend.position='none')

2 个答案:

答案 0 :(得分:2)

您可以使用 label_wrap_gen 选项,如下所示

p <- sample_data %>%  ggplot(aes(x= Data, fill=Category)) + geom_density() + 
facet_grid(Name~Category, labeller = label_wrap_gen(width=10)) +
xlab("Data (Unit)") 

答案 1 :(得分:1)

一种方法是简单地添加一个包含组合标签的新列:

joined_dat$combinedlabel=paste0(joined_dat$long_name,"\n",joined_dat$sector)

然后使用所述专栏来表达:

ggplot(joined_dat,aes(x=date,y=price,color=px_name))+
  geom_path()+
  facet_grid(combinedlabel~.,scales='free_y')+
  theme(strip.text.y=element_text(angle=0))+
  theme(legend.position='none')