我无法弄清楚如何在expand()
中使用scale_x_discrete()
来扩展分类x轴,以便在点的右侧放置标签不会偏离绘图。 / p>
我知道如果x是数字,我可以简单地调整x的最大限制,使得所有点都向左移动。但是,我无法弄清楚如何使用分类变量来做到这一点。我甚至不关心扩展变量标签是否为“”。我只需要在x轴上最后一个分类变量右侧有更多空间。
以下是可用于说明如何成功执行此操作的示例数据:
data(iris)
library(ggplot2)
ggplot(data = iris, aes(x = Species, y = Sepal.Width)) +
geom_jitter()
感谢您提供的任何帮助,请随时提出任何澄清问题!
编辑:用于简单直观的解释
答案 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
更新:或者,如果您真的想要将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,''))
答案 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))