R ggplot2:使用expand_limits(x = 0)后是否可以删除零标签?

问题描述 投票:0回答:1

ggplot 函数 Expand_limits(x = 0) 为许多图形(在循环中)产生非常令人满意的间距,但我不想有零标签。有谁知道如何仅删除零标签?标签也需要是整数,所以我尝试修改 Joshua Cook 的函数:

integer_breaks <- function(n = 5, ...) {
fxn <- function(x) {
breaks <- floor(pretty(x, n, ...))
names(breaks) <- attr(breaks, "labels")
breaks
}
return(fxn)
}

无济于事。一个最小的例子是:

xxx <- c(1, 2, 4, 1, 1, 4, 2, 4, 1, 1, 3,  3, 4 )
yyy <- c(11, 22, 64, 45, 76, 47, 23, 44, 65, 86, 87, 83, 56 ) 
data <- data.frame(xxx, yyy) 
p <- ggplot(data = data, aes(x = data[ , 1], y = data[ , 2]), group = data[ , 1]) + geom_count(color = "blue") + expand_limits(x = 0) + scale_x_continuous(breaks = integer_breaks()) 
p 

我不想要 x 轴上的零,但我事先不知道还有多少个其他 x 轴值。另一种方法是在图表的左侧以与扩展限制类似的方式生成一个空间 - 但其宽度必须与 x 轴值的数量相关。

ggplot2 integer zero x-axis
1个回答
0
投票

我认为你走在正确的道路上;如果您在“integer_breaks”函数中删除“breaks”向量的第一个元素,它会产生您想要的结果(如果我理解正确的话),例如

library(tidyverse)

int_breaks_drop_zero <- function(n = 5, ...) {
    fxn <- function(x) {
      breaks <- floor(pretty(x, n, ...))[-1]
      names(breaks) <- attr(breaks, "labels")
      breaks[-1]
    }
    return(fxn)
}

xxx <- c(1, 2, 4, 1, 1, 4, 2, 4, 1, 1, 3,  3, 4 )
yyy <- c(11, 22, 64, 45, 76, 47, 23, 44, 65, 86, 87, 83, 56 ) 
data <- data.frame(xxx, yyy) 
p <- ggplot(data = data, aes(x = data[ , 1], y = data[ , 2]), group = data[ , 1]) +
  geom_count(color = "blue") +
  expand_limits(x = 0) +
  scale_x_continuous(breaks = int_breaks_drop_zero())
p

创建于 2024-03-13,使用 reprex v2.1.0

这能解决你的问题吗?

© www.soinside.com 2019 - 2024. All rights reserved.