gpt4 book ai didi

r - 次要/双轴 - ggplot

转载 作者:行者123 更新时间:2023-12-04 01:11:16 26 4
gpt4 key购买 nike

我打开这个问题有三个原因:第一,用ggplot重新打开双轴讨论。其次,询问是否有一种非折磨性的通用方法来做到这一点。最后,就解决方法寻求您的帮助。

我意识到有很多关于如何向 ggplot 添加辅助轴的讨论和问题。这些结果通常会得出以下两个结论之一:

  • 不好,别做 : Hadley Wickham 回答了同样的问题 here ,得出的结论是不可能。他有一个很好的论点,即“使用单独的 y 尺度(而不是相互转换的 y 尺度)从根本上是有缺陷的”。
  • 如果您坚持,请过度复杂化您的生活并使用网格 :例如 herehere


  • 但是,这里有一些我经常遇到的情况,其中可视化将大大受益于双轴。我抽象了下面的概念。
  • 情节很宽,因此 复制 右侧的 y 轴会有所帮助(或顶部的 x 轴)会简化解释。 (我们都偶然发现了其中一个需要在屏幕上使用标尺的图,因为轴太远了)
    enter image description here
  • 我需要添加一个新轴 转型到原始轴(例如:百分比,分位数,..)。 (我目前正面临一个问题。下面可重现的示例)
    enter image description here
  • 最后,添加 分组/元信息 :我在使用多级分类数据时偶然发现了这一点(例如:Categories = {1,2,x,y,z},它们被“元划分”为字母和数字。)即使对元级别和添加图例甚至分面解决了问题,使用辅助轴使事情变得更简单,用户无需将条形的颜色与图例的颜色相匹配。
    enter image description here

  • 一般问题:鉴于新的可扩展特性 ggplot 2.0.0 , 有没有更健壮的无酷刑方法来拥有双轴而不使用网格?

    最后一个评论:我完全同意双轴的错误使用可能会产生危险的误导......但是,信息可视化和数据科学不是一般情况下的情况吗?


    解决问题 :

    目前,我需要一个百分比轴(第二种情况)。我用过 annotategeom_hline作为解决方法。但是,我无法将文本移到主要情节之外。 hjust似乎也没有和我一起工作。

    可重现的例子:
    library(ggplot2)

    # Random values generation - with some manipulation :
    maxVal = 500
    value = sample(1:maxVal, size = 100, replace = T)
    value[value < 400] = value[value < 400] * 0.2
    value[value > 400] = value[value > 400] * 0.9


    # Data Frame prepartion :
    labels = paste0(sample(letters[1:3], replace = T, size = length(value)), as.character(1:length(value)))
    df = data.frame(sample = factor(labels, levels = labels), value = sort(value, decreasing = T))


    # Plotting : Adding Percentages/Quantiles as lines
    ggplot(data = df, aes(x = sample, y = value)) +
    geom_bar(stat = "identity", fill = "grey90", aes(y = maxVal )) +
    geom_bar(stat = "identity", fill = "#00bbd4") +
    geom_hline(yintercept = c(0, maxVal)) + # Min and max values
    geom_hline(yintercept = c(maxVal*0.25, maxVal*0.5, maxVal*0.75), alpha = 0.2) + # Marking the 25%, 50% and 75% values
    annotate(geom = "text", x = rep(100,3), y = c(maxVal*0.25, maxVal*0.5, maxVal*0.75),
    label = c("25%", "50%", "75%"), vjust = 0, hjust = 0.2) +
    theme(axis.text.x = element_text(angle = 90, hjust = 1)) +
    theme(panel.background = element_blank()) +
    theme(plot.background = element_blank()) +
    theme(plot.margin = unit(rep(2,4), units = "lines"))

    最佳答案

    回应#1

    We've all stumbled across one of those plots where we need to use a ruler on the screen, because the axis is too far



    cowplot .
    # Assign your original plot to some variable, `gpv` <- ggplot( ... )
    ggdraw(switch_axis_position(gpv, axis="y", keep="y"))

    关于r - 次要/双轴 - ggplot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34741067/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com