【问题标题】:Custom categorical threshold axis break on a continuous scale in R自定义分类阈值轴在 R 中以连续比例中断
【发布时间】:2018-05-07 09:09:09
【问题描述】:

考虑以下情节:

library(ggplot2)
ggplot(mtcars, aes(mpg, wt)) +
  geom_point(aes(colour = factor(cyl))) +
  scale_y_continuous(name = "Weight", breaks = c(2, 3, 4, 5))

有谁知道替换例如值的方法? 5 有一个分类中断,例如“高于 5”,三个观察值出现在这个创建的中断线上?我正在寻找一种方法来将异常值包含在绘图中而不倾斜它,但仍然能够显示与它们有关的信息(在这种情况下,它们的 mpg 值)而不是完全排除它们。

以下代码:

library(ggplot2)
ggplot(mtcars, aes(mpg, wt)) +
  geom_point(aes(colour = factor(cyl))) +
  scale_y_continuous(name = "Weight", breaks = c(2, 3, 4, >5), labels = c(2, 3, 4, "Above 5")))

由于“>”符号在中断中不起作用。有什么建议?谢谢。

【问题讨论】:

  • 在没有特定数值的情况下,ggplot 如何知道轴上的所需位置?为什么不使用新标签保留 break=c(2,3,4,5)?
  • 在这种情况下当然可以,但是如果 5 以上点的权重是数千呢?该情节在视觉上不再有意义,然后我认为最好有一个阈值,例如5或1000以上等
  • @ykl 它不起作用,因为您将分类值传递给连续函数scale_y_continuous。将scale_y_continuous 替换为scale_y_discrete(name="Weight", breaks=c(">5"))。但是,我不确定这个建议是否合乎逻辑,因为mtcars 数据中的wt 不是离散的。

标签: r ggplot2 axis threshold continuous


【解决方案1】:

我发现在绘图之前进行简单的数据操作过程可以满足我的需求。

library(dplyr)
mtcars <- mtcars %>%  mutate(wt2 = case_when(wt < 5  ~ wt,
                              wt > 5 ~ 5))

上面的代码会将 5 的值分配给任何大于 5 的 mpg 值,以便它们出现在同一断行线上。然后我可以绘图,点的重叠可以随着 alpha 值的变化而显示。

  library(ggplot2)
ggplot(mtcars, aes(mpg, wt2)) +
  geom_point(aes(colour = factor(cyl), alpha = 0.2, size = 2)) +
  scale_y_continuous(name = "Weight", breaks = c(2, 3, 4, 5), labels = c(2, 3, 4, "Above 5"))

感谢您的 cmets。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-13
    • 1970-01-01
    • 2018-07-04
    • 1970-01-01
    • 2018-11-26
    • 1970-01-01
    • 2012-01-18
    相关资源
    最近更新 更多