gpt4 book ai didi

r - Y-break 与 R 的比例变化

转载 作者:行者123 更新时间:2023-12-04 11:09:10 24 4
gpt4 key购买 nike

我还是 R 的新手。我同意帮助一位 friend 重新绘制他的图表,但事实证明,他的一个情节设计很难重现。这是因为他在条形图上插入了一个 Y 轴中断,然后进行了比例更改。下面的示例图片说明了这一点。 Example image of plot

出乎意料的是,事实证明这很难实现。我曾尝试使用:

barplot() #所有元素都很难实现,无法实现

gap.barplot() #不允许分组条形图

ggplot() #经过大量时间学习基础知识后发现它不允许破坏轴

请问有人有在R上绘制这个的直观方法吗?
注意:我知道显示此信息的最佳方法可能是对数据进行对数转换以使其符合比例,但我想建议使用两个绘图选项。

如果有人想测试,下面给出了一些汇总数据:

  AAP    Sex    min     max       mean          sd          
1 12d Female 100.97 702.36 444.07389 197.970342
2 12d Male 24.69 1090.15 469.48200 262.893780
3 18d Female 195.01 4204.68 1273.72000 1105.568111
4 18d Male 487.75 4941.30 1452.37937 1232.659688
5 24d Female 248.58 3556.11 1583.09958 925.263382
6 24d Male 556.60 4463.22 1589.50318 973.225661
7 3d Female 4.87 16.93 12.86571 4.197987
8 3d Male 3.23 16.35 8.13000 5.364383
9 6d Female 3.20 37.63 15.07500 11.502331
10 6d Male 4.64 94.93 28.39300 30.671206

最佳答案

无论您使用哪种图形包,所涉及的基本步骤都相同:

  • 将数据转换成你想要的 Y 尺度
  • 提供比例尺中断的一些指示
  • 更新 y 轴以显示新的比例

  • 所以 ggplot 中的一个例子可能看起来像
    library(ggplot2)
    dput (dat)
    #structure(list(AAP = structure(c(1L, 1L, 2L, 2L, 3L, 3L, 4L,
    #4L, 5L, 5L), .Label = c("12d", "18d", "24d", "3d", "6d"), class = "factor"),
    #Sex = structure(c(1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L, 1L, 2L), .Label = c("Female",
    #"Male"), class = "factor"), min = c(100.97, 24.69, 195.01,
    #487.75, 248.58, 556.6, 4.87, 3.23, 3.2, 4.64), max = c(702.36,
    #1090.15, 4204.68, 4941.3, 3556.11, 4463.22, 16.93, 16.35,
    #37.63, 94.93), mean = c(444.07389, 469.482, 1273.72, 1452.37937,
    #1583.09958, 1589.50318, 12.86571, 8.13, 15.075, 28.393),
    #sd = c(197.970342, 262.89378, 1105.568111, 1232.659688, 925.263382,
    #973.225661, 4.197987, 5.364383, 11.502331, 30.671206)), .Names = c("AAP",
    #"Sex", "min", "max", "mean", "sd"), class = "data.frame", row.names = c(NA,
    #-10L))

    #Function to transform data to y positions
    trans <- function(x){pmin(x,40) + 0.05*pmax(x-40,0)}

    yticks <- c(0, 20, 40, 500, 1000, 1500, 2000)

    #Transform the data onto the display scale
    dat$mean_t <- trans(dat$mean)
    dat$sd_up_t <- trans(dat$mean + dat$sd)
    dat$sd_low_t <- pmax(trans(dat$mean - dat$sd),1) #

    ggplot(data=dat, aes(x=AAP, y=mean_t, group=Sex,fill=Sex)) +
    geom_errorbar(aes(ymin=sd_low_t, ymax=sd_up_t),position="dodge") +
    geom_col(position="dodge") +
    geom_rect(aes(xmin=0, xmax=6, ymin=42, ymax=48), fill="white") +
    scale_y_continuous(limits=c(0,NA), breaks=trans(yticks), labels=yticks) +
    labs(y="Relative titer of CLas")

    Output plot

    请注意,我没有得到与您示例中完全相同的误差条,结果输出可能不会让 ggplot2 的作者 Hadley Wickham 满意。

    关于r - Y-break 与 R 的比例变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44694496/

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