【问题标题】:manually add breaks to both x and y axis in ggplot2在 ggplot2 中手动为 x 和 y 轴添加中断
【发布时间】:2017-01-02 14:34:59
【问题描述】:

我通常使用 scale_y_continuous(或 scale_x_continuous)更改 ggplot2 中连续变量的刻度间隔。我通常还使用coord_cartesian(xlim=)(或ylim= 用于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")

这会产生以下具有默认比例的图:

如果我想将 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))

但是,当我尝试同时对两个轴进行相同的比例调整时,输出不会产生我期望的结果(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 轴也不等价。我不明白为什么。非常感谢任何帮助。

【问题讨论】:

  • 不确定,但我忘了添加一行代码(我的错),只是要收集ab 的数据框:df&lt;-data.frame(a,b) 我已经在上面的示例中修复了它

标签: r ggplot2 axis scatter-plot


【解决方案1】:
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))

【讨论】:

  • 啊,我看到了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))

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-07
    • 2016-01-16
    • 2014-04-12
    • 2020-11-05
    • 2013-12-24
    • 1970-01-01
    相关资源
    最近更新 更多