【问题标题】:Jitter categorical variable and keep variable name in graph抖动分类变量并在图中保留变量名称
【发布时间】:2020-06-12 16:17:36
【问题描述】:

我不得不沿分类轴抖动点以避免数据重叠。不幸的是,要做到这一点,我需要让我的分类变量成为一个因素,然后是数字。当我绘制它时,它仍然是数字而没有分类标签。有没有办法让标签显示出来?

代码如下:

levels(factor(All_VARs$Dataset))
[1] "Data1"        "Data2" "Data3"  

df$Dataset_jit <- jitter(as.numeric(factor(df$Dataset)))

ggplot(df, aes(x = POS_start, y = Dataset_jit, color = Type)) +
   geom_point() +
   scale_color_manual(values = annotation_color_associations) +
   theme_classic()

我希望 y 轴是分类的,同时保持抖动。

【问题讨论】:

    标签: r jitter


    【解决方案1】:

    你可以使用position = position_jitter():

    ggplot(df, aes(x = POS_start, y = as.factor(Set), color = as.factor(Type))) +
       geom_point(position = position_jitter(height = 0.2), show.legend = FALSE) +
       theme_classic() + 
       scale_color_manual(values = colorRampPalette(c("pink", "purple"))(5)) + 
       labs(x = "CDS Position", y = "Dataset")
    

    编辑: OP说他们需要能够做其他事情,所以另一种方法是用scale_y_continuous手动控制y轴:

    df$Dataset_jit <- jitter(as.numeric(factor(df$Set)))
    
    ggplot(df, aes(x = POS_start, y = Dataset_jit, color = as.factor(Type))) +
       geom_point(show.legend = FALSE) +
       theme_classic() + 
       scale_color_manual(values = colorRampPalette(c("pink", "purple"))(5)) + 
       scale_y_continuous(breaks = 1:3, labels = c("Data 1", "Data 2", "Data 3")) +
       labs(x = "CDS Position", y = "Dataset")
    

    样本数据

    set.seed(3)
    df <- data.frame(POS_start = round(runif(n = 100,1,1500),0),
                     Set = sample(1:3,100, prob = c(0.45,0.1,0.45), replace = TRUE),
                     Type = sample(1:5,100,replace = TRUE))
    

    【讨论】:

    • 谢谢,实际上我应该在下一行添加我想要添加的段,这些段将脱离点,所以我需要在绘制之前对点进行抖动,因为段不会如果我分别抖动点,则与点对齐
    • 谢谢伊恩,第二个解决方案效果很好!我添加了这一行:scale_y_continuous(breaks = 1:3, labels = levels(df$Dataset)) + ,以防我的数据集名称发生变化。
    • 优秀。很高兴它对你有效。如果某个答案解决了您的问题,请考虑使用左侧的灰色复选标记将其标记为已接受和/或投票。
    最近更新 更多