在ggplot中展开分类x轴

时间:2016-10-05 17:00:51

标签: r ggplot2

我无法弄清楚如何在expand()中使用scale_x_discrete()来扩展分类x轴,以便在点的右侧放置标签不会偏离绘图。 / p>

我知道如果x是数字,我可以简单地调整x的最大限制,使得所有点都向左移动。但是,我无法弄清楚如何使用分类变量来做到这一点。我甚至不关心扩展变量标签是否为“”。我只需要在x轴上最后一个分类变量右侧有更多空间。

以下是可用于说明如何成功执行此操作的示例数据:

data(iris)

library(ggplot2)
ggplot(data = iris, aes(x = Species, y = Sepal.Width)) +
  geom_jitter() 

感谢您提供的任何帮助,请随时提出任何澄清问题!

编辑:用于简单直观的解释

enter image description here

2 个答案:

答案 0 :(得分:4)

您可以在分类变量的现有级别附加一个空白级别,如:

data(iris)

levels(iris$Species) <- c(levels(iris$Species),'') # add blank level

library(ggplot2)
ggplot(data = iris, aes(x = Species, y = Sepal.Width)) +
  geom_jitter() +
  scale_x_discrete(drop=FALSE) # don't drop unused blank level

enter image description here

更新:或者,如果您真的想要将x轴扩展为数值,那么您可以先通过as.integer()将分类转换为数字:

data(iris)
specVals <- levels(iris$Species)
iris$Species <- as.integer(iris$Species)

library(ggplot2)
ggplot(data = iris, aes(x = Species, y = Sepal.Width)) +
  geom_jitter(height=0) + # on 2nd thought -- don't add noise to the quantitative axis
  scale_x_continuous(limits=c(min(iris$Species)-0.5,max(iris$Species)+1),
                     breaks=(min(iris$Species)):(max(iris$Species)+1), 
                     labels=c(specVals,''))

enter image description here

答案 1 :(得分:0)

由于我遇到了同样的问题,因此我发现>>> def get_category(hp): ... print(['D','A','C','B'][hp % 4]) ... >>> for i in range(10): ... print(i,end=':\t') ... get_category(i) ... 0: D 1: A 2: C 3: B 4: D 5: A 6: C 7: B 8: D 9: A 在这里非常有用:

expand_limits(...)

或者,为避免硬编码限制:

dat <- data.frame(x= c('a', 'b', 'c'), y= 1:3)
ggplot(data= dat, aes(x= x, y= y)) + 
    geom_point() + 
    expand_limits(x= c(-1, 5))

(带有 expand_limits(x= c(-1, length(levels(dat$x)) + 2)) enter image description here