首页 > 解决方案 > x 轴与 geom_segment 的顺序

问题描述

我正在尝试绘制一个 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),
                 y2=c(5,6,7,8))

当我使用 geom_point 时,x 轴按因子级别正确排序:

ggplot(df) + aes(x=x1, y=y1) + geom_point(aes(x=x1, y=y1))

在此处输入图像描述

当我添加 ageom_segment时,排序将重置为字母顺序。

ggplot(df) + aes(x=x1, y=y1)+  geom_point() + geom_segment(aes(xend=x2, yend=y2))

在此处输入图像描述

如何强制 x 轴移动 z3, z2, z1 ?

标签: rggplot2

解决方案


x这与每个变量具有不同的因子水平有关(此处此处的一些讨论)。

您可以使用scale_x_discrete(limits = levels(df$x2) )orscale_x_discrete(drop = FALSE)作为解决方法。

ggplot(df) +  
    aes(x=x1, y=y1) +
    geom_point() + 
    geom_segment(aes(xend=x2, yend=y2)) +
    scale_x_discrete(drop = FALSE )

在此处输入图像描述


推荐阅读