在ggplot2中手动添加x轴和y轴的断点

3

通常,我使用scale_y_continuous(或 scale_x_continuous )来更改 ggplot2 中连续变量的刻度线。我还通常使用coord_cartesian(xlim=)(或 y 轴的 ylim= )设置坐标轴限制。像以下这样一切都可以正常工作:

#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-13,即从1开始到13结束的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_x_continuous(breaks = c(1,3,5,7,9,11,13))+
  coord_cartesian(xlim=c(0, 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))

如图所示,尽管同样的代码被传递给了x和y轴,但它们并不相等。我不明白为什么会这样,请帮忙解答。谢谢!

enter image description here


1
不确定但我忘记添加一行代码(我的错),只需收集“a”和“b”的数据框:“df<-data.frame(a,b)”我已在上面的示例中修复了它。 - Cyrus Mohammadian
2个回答

6
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


啊,我明白了,它是“coord_fixed”。谢谢! - Cyrus Mohammadian

3

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))

合适的限制下的图形

......或者如果您坚持使用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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接