我对这个情节有两个问题。我想让条形更宽(组之间的间距更小)并且我希望每组条形都以每个 x 因子值为中心。
我在 y 轴上有一个连续变量,在 x 轴上有一个因子值。每个因素我有三组。
以下是我的 Iris 数据问题示例:
d <- iris
ggplot(d) +
geom_col(aes(x=as.factor(Sepal.Length), y=Petal.Width, fill=as.factor(Species)),position = position_dodge(preserve = "single"), width=1) +
theme(axis.text.x = element_text(angle = 90).
Run Code Online (Sandbox Code Playgroud)
这让你可能更接近你正在寻找的东西(我假设d在你的例子中是iris):
ggplot(iris) +
geom_col(
aes(
x=as.factor(Sepal.Length), y=Petal.Width, fill=Species
),
position = position_dodge(0.5),
width=0.5) +
theme(axis.text.x = element_text(angle = 90, vjust=0.5))
Run Code Online (Sandbox Code Playgroud)
现在,解释我改变了什么以及为什么:
X 轴上的文本定位。 你曾经element_text(angle=90)改变过文本的方向。这是正确的,但它只会改变角度而不是定位/对齐。默认情况下,水平文本垂直对齐为“在顶部”。如果您运行上面的代码并使用vjust=1代替vjust=0.5,您会看到它恢复为您显示的方式,刻度线与 x 轴文本上的值的“顶部”对齐。
as.factor(Species)不需要声明Species一个因子。运行str(iris),你会发现这iris$Species已经是一个因素。除了弄乱图例的标题之外,并没有真正改变任何结果。
Position_dodge 宽度和宽度。 这一个是最好的,你在这两个方面的价值观搞乱解释position_dodge(0.5)和width=0.5。自己玩一下,你会看到他们每个人都做了什么,但这里是一般解释:
x 轴上每个位置的总列宽由width=0.5的参数决定geom_col()。因此,对于Sepal.Length该图中的每个因素,这意味着“0.5”用作该空间中一列(或多列)的总宽度。“1.0”表示“我希望所有列相互接触”,而“0.2”之类的意思是“我想要细列”。“0”意味着......我不想要列 - 给它们一个宽度为零!
每个“子列”的宽度(在这个例子中每个 Sepal.Length 的每个 Species 列)由position_dodge(width=0.5)术语控制。0.5 表示“将其分成两半并使列彼此完全接触”。较高的值会将它们分开,较低的值会将它们挤压在一起,其中 0 表示它们位于彼此之上。使该值变得非常大,您会得到子列运行到相邻列中......
再次 - 使用这些术语,您应该了解它们如何协同工作。
| 归档时间: |
|
| 查看次数: |
613 次 |
| 最近记录: |