R x轴与geom_段的顺序
我试图画一个x轴离散但不按字母顺序排序的图 我有一个data.frame:R x轴与geom_段的顺序,r,ggplot2,R,Ggplot2,我试图画一个x轴离散但不按字母顺序排序的图 我有一个data.frame: df <- data.frame(x1=factor(c('z1', 'z2', 'z1', 'z2'), levels=c('z3','z2', 'z1')), x2=factor(c('z1', 'z1', 'z2', 'z3'), levels=c('z3','z2', 'z1')), y1=c(1,2,3,4),
df <- data.frame(x1=factor(c('z1', 'z2', 'z1', 'z2'), levels=c('z3','z2', 'z1')),
x2=factor(c('z1', 'z1', 'z2', 'z3'), levels=c('z3','z2', 'z1')),
y1=c(1,2,3,4),
y2=c(5,6,7,8))
当我添加geom_段
时,顺序将重置为字母顺序
ggplot(df) + aes(x=x1, y=y1)+ geom_point() + geom_segment(aes(xend=x2, yend=y2))
如何强制x轴转到z3、z2、z1?这与每个
x
变量具有不同的因子水平有关(一些讨论和讨论)
您可以使用scale\u x\u discrete(限制=级别(df$x2))
或scale\u x\u discrete(drop=FALSE)
作为解决方法
ggplot(df) +
aes(x=x1, y=y1) +
geom_point() +
geom_segment(aes(xend=x2, yend=y2)) +
scale_x_discrete(drop = FALSE )
我不确定它为什么会这样切换顺序,但您可以通过相应的
scale\u*\ u discrete()
中的limits
设置离散比例的顺序。由于您的x变量已经是具有正确级别顺序的因子,您可以执行scale\u x\u discrete(limits=levels(df$x2))
我在本主题中看到了这一点。虽然这是一个古老的问题,但我认为关于为什么会发生这种情况的答案可能与此相关,并且与数据中实际存在的不同因子水平有关(即使您明确地将它们设置为具有相同的因子水平)。另请参见:scale\u x\u discrete(drop=FALSE)
另一个相关(已关闭)问题,其中scale\u x\u discrete(drop=FALSE)
解决了该问题<代码>ggplot(df)+aes(x=x1,y=y1)+geom_段(aes(xend=x2,yend=y2))+scale_x_离散(drop=FALSE)谢谢@aosmith,这很有效。如果你把它作为一个答案发布,我会接受它。无论出于什么原因,drop=FALSE
对我不起作用,我不得不使用另一个建议scale\u x\u discrete(limits=levels(df$x2))
(或我问题中的等效建议)。请注意,x2
属性与xend
属性匹配。对于我来说,这个示例仍然使用与ggplot2 3.2.1相同的输出运行。drop=FALSE
对本例或您自己的数据无效吗?
ggplot(df) +
aes(x=x1, y=y1) +
geom_point() +
geom_segment(aes(xend=x2, yend=y2)) +
scale_x_discrete(drop = FALSE )