ggplot2离散量表的连续值

时间:2014-12-18 13:53:23

标签: r ggplot2

我有一个像这样格式化的data.table(但更大)并命名为data3:

    V1 V2        V3        V4            V5
1    6  1  50000000 100000000  0.000000e+00
2    5  1  50000000 100000000  0.000000e+00
3    4  1  50000000 100000000  0.000000e+00
4    3  1  50000000 100000000  0.000000e+00
5    2  1  50000000 100000000  7.407407e-01
6    1  1  50000000 100000000  5.925926e+00
7   -1  1  50000000 100000000 -4.370370e+01
8   -2  1  50000000 100000000 -7.407407e-01
9    6  1 150000000 100000000  0.000000e+00
10   5  1 150000000 100000000  0.000000e+00
11   4  1 150000000 100000000  0.000000e+00
12   3  1 150000000 100000000  0.000000e+00
13   2  1 150000000 100000000  3.703704e+00
14   1  1 150000000 100000000  5.925926e+00
15  -1  1 150000000 100000000 -1.481481e+01
16  -2  1 150000000 100000000  0.000000e+00

我将积极和消极的价值分开:

subdat1=subset(data3, V1>0)
subdat2=subset(data3, V1<0)

我使用此代码制作了直方图:

ggplot(data=data3) + 
  facet_grid(~V2, space="free_x", scales="free_x", labeller=label_value)+ 
  theme(axis.text.x=element_blank(), axis.ticks=element_blank(), axis.title.x=element_blank()) +
  geom_hline(yintercept=0, colour="red", size=1) + 
  geom_bar(data=subdat1,aes(x=V3, y=V5, fill=V1, width=V4), stat="identity")+
  geom_bar(data=subdat2,aes(x=V3, y=V5, fill=V1, width=V4), stat="identity") + 
  guides(fill=guide_legend(title="CNV"))

我得到的东西接近我想要的东西: enter image description here

但是传说不是离散的(V1的每个值一种颜色)并且不是很好。 所以我尝试了这个:

ggplot(data=data3)+ 
  facet_grid(~V2, space="free_x", scales="free_x", labeller=label_value)+
  theme(axis.text.x=element_blank(), axis.ticks=element_blank(), axis.title.x=element_blank()) +
  geom_hline(yintercept=0, colour="red", size=1) + 
  geom_bar(data=subdat1,aes(x=V3, y=V5, fill=V1, width=V4), stat="identity")+
  geom_bar(data=subdat2,aes(x=V3, y=V5, fill=V1, width=V4), stat="identity") + 
  guides(fill=guide_legend(title="CNV"))+
  scale_colour_gradient(trans="identity")

但有以下错误:

Erreur : Continuous value supplied to discrete scale

我因此尝试了这个,转换值并使用离散级别:

subdat1$V1 <- factor(subdat1$V1, levels = rev(levels(factor(subdat1$V1))))
subdat2$V1 <- factor(subdat2$V1, levels = levels(factor(subdat2$V1)))

再次尝试了ggplot,但我现在遇到了这个错误:

Erreur dans unit(tic_pos.c, "mm") : 'x' and 'units' must have length > 0

我没有更多的想法......
非常感谢帮助!

编辑: 我刚刚再次尝试:

ggplot(data=data3)+  
  facet_grid(~V2, space="free_x", scales="free_x", labeller=label_value)+  
  theme(axis.text.x=element_blank(), axis.ticks=element_blank(), axis.title.x=element_blank())+  
  geom_hline(yintercept=0, colour="red", size=1)+   
  geom_bar(data=subdat1,aes(x=V3, y=V5, fill=V1, width=V4), stat="identity")+ 
  geom_bar(data=subdat2,aes(x=V3, y=V5, fill=V1, width=V4), stat="identity")+   
  guides(fill=guide_legend(title="CNV"))

并成功获得:

enter image description here

所以,我越来越近了。 我怎么能不仅反转图例,而且还反转上部直方图中的顺序?

1 个答案:

答案 0 :(得分:0)

我最终做了什么:

ggplot(data=data3)+ facet_grid(~V2, space="free_x", scales="free_x", labeller=label_value)+ theme(axis.text.x=element_blank(), axis.ticks=element_blank(), axis.title.x=element_blank()) +geom_hline(yintercept=0, colour="red", size=1) + geom_bar(data=subdat1,aes(x=V3, y=rev(V5), fill=rev(V1), width=V4), stat="identity")+geom_bar(data=subdat2,aes(x=V3, y=V5, fill=V1, width=V4), stat="identity") + guides(fill=guide_legend(title="CNV")) +scale_fill_discrete(breaks = c(6, 5, 4, 3, 2, 1, -1, -2))

我在y中使用rev()函数并填充。但......数据就像拉伸......?

enter image description here

任何想法?