2016-08-26 72 views
2

我通常使用scale_y_continuous(或scale_x_continuous)更改了ggplot2中连续变量的缩放中断。我通常还使用coord_cartesian(xlim=)(或y轴的ylim=)来设置轴限制。所有这一切工作得很好像以下:在ggplot2中手动添加中断到x和y轴

#Some example data 
set.seed(100) 
b<-sample(1:10, 10) 
a<-sample(1:10, 10) 

df<-data.frame(a,b) 

#Graph without scales set (just default) 
library(ggplot2) 
ggplot(data=df, aes(a,b))+ 
    theme_bw() + theme(panel.border = element_rect(colour = "black", fill=NA, size=1), 
        panel.grid.major = element_blank(), 
        panel.grid.minor = element_blank(), 
        axis.line = element_line(colour = "black"))+ 
    geom_text(aes(label=rownames(df)), color="black") 

产生默认尺度以下情节:

enter image description here

如果我想调整x轴,比方说,1-

ggplot(data=df, aes(a,b))+ 
    theme_bw() + theme(panel.border = element_rect(colour = "black", fill=NA, size=1), 
        panel.grid.major = element_blank(), 
        panel.grid.minor = element_blank(), 
        axis.line = element_line(colour = "black"))+ 
    geom_text(aes(label=rownames(df)), color="black")+ 
    scale_x_continuous(breaks = c(1,3,5,7,9,11,13))+ 
    coord_cartesian(xlim=c(0, 13)) 

enter image description here

:13我会做以下(即13刻度从1开始,并在结束13分)

...和y轴...

ggplot(data=df, aes(a,b))+ 
    theme_bw() + theme(panel.border = element_rect(colour = "black", fill=NA, size=1), 
        panel.grid.major = element_blank(), 
        panel.grid.minor = element_blank(), 
        axis.line = element_line(colour = "black"))+ 
    geom_text(aes(label=rownames(df)), color="black")+ 
    scale_y_continuous(breaks = c(1,3,5,7,9,11,13))+ 
    coord_cartesian(ylim=c(0, 13)) 

enter image description here

然而,当我试图在同一时间内完成两轴非常相同规模的调整,输出不不会产生我所期望的(x轴和y轴都是1-13)。

ggplot(data=df, aes(a,b))+ 
    theme_bw() + theme(panel.border = element_rect(colour = "black", fill=NA, size=1), 
        panel.grid.major = element_blank(), 
        panel.grid.minor = element_blank(), 
        axis.line = element_line(colour = "black"))+ 
    geom_text(aes(label=rownames(df)), color="black")+ 
    scale_y_continuous(breaks = c(1,3,5,7,9,11,13))+ 
    coord_cartesian(ylim=c(0, 13))+ 
    scale_x_continuous(breaks = c(1,3,5,7,9,11,13))+ 
    coord_cartesian(xlim=c(0, 13)) 

enter image description here

正如你所看到的,在X和Y轴都没有,即使完全相同的代码已经被传递到两个轴相等。我不明白为什么。任何帮助深表感谢。

+1

不知道,但我忘了添加的代码(我的坏)一行,就在数据帧收集''a''和''b'':''DF <-data.frame(一,b)''我已经修复了上面的例子 –

回答

3
set.seed(100) 
df <- data.frame(b = sample(1:10, 10), a = sample(1:10, 10))  


ggplot(data=df, aes(a,b))+ 
theme_bw() + theme(panel.border = element_rect(colour = "black", fill=NA, size=1), 
        panel.grid.major = element_blank(), 
        panel.grid.minor = element_blank(), 
        axis.line = element_line(colour = "black")) + 
geom_text(aes(label=rownames(df)), color="black") + 
scale_y_continuous(breaks = c(1,3,5,7,9,11,13)) + 
scale_x_continuous(breaks = c(1,3,5,7,9,11,13)) + 
coord_fixed(ylim=c(0, 13),xlim=c(0, 13)) 

enter image description here

+0

啊,我看到它的''coord_fixed''谢谢! –

2

scale_*_continuous功能有limits参数,你可以用它代替coord_cartesian

ggplot(data=df, aes(a,b))+ 
    theme_bw() + theme(panel.border = element_rect(colour = "black", fill=NA, size=1), 
         panel.grid.major = element_blank(), 
         panel.grid.minor = element_blank(), 
         axis.line = element_line(colour = "black"))+ 
    geom_text(aes(label=rownames(df)), color="black")+ 
    scale_y_continuous(breaks = c(1,3,5,7,9,11,13), limits = c(0, 13)) + 
    scale_x_continuous(breaks = c(1,3,5,7,9,11,13), limits = c(0, 13)) 

plot with proper limits

...或者,如果你坚持用coord_cartesian这样做,在一次通话中完成。否则,它会裁剪图形,然后再次裁剪,这就是导致问题的原因。

ggplot(data=df, aes(a,b))+ 
    theme_bw() + theme(panel.border = element_rect(colour = "black", fill=NA, size=1), 
         panel.grid.major = element_blank(), 
         panel.grid.minor = element_blank(), 
         axis.line = element_line(colour = "black"))+ 
    geom_text(aes(label=rownames(df)), color="black")+ 
    scale_y_continuous(breaks = c(1,3,5,7,9,11,13))+ 
    scale_x_continuous(breaks = c(1,3,5,7,9,11,13))+ 
    coord_cartesian(xlim=c(0, 13), ylim = c(0, 13)) 
# returns the same thing