【问题标题】:Start barplot from axis maximum从轴最大值开始条形图
【发布时间】:2021-01-05 14:26:44
【问题描述】:

我正在构建一个对数刻度的条形图:

library(ggplot2)
library(scales)

data <- matrix(c("2%","A", 0.00013, 4.94e-06, "6%", "A", 1.7e-05, 7.95e-06, "2%", "B", 3.1e-06, 1.50e-07, "6%", "B", 6.8e-07, 5.04e-07), ncol=4, byrow=TRUE)
data <- as.data.frame(data); colnames(data) = c("P", "variable", "value", "sd")
data$value <- as.numeric(as.character(data$value)); data$sd <- as.numeric(as.character(data$sd))

plot <- ggplot(data=data, aes(x=P, y=value, fill=variable)) + geom_bar(stat="identity", color = "black", size = 1, width = 0.5, position = position_dodge()) +
  scale_x_discrete(limits=c("2%", "6%")) + scale_y_log10(breaks = trans_breaks("log10", function(x) 10^x)) +  
  geom_errorbar(aes(ymin=value, ymax=sd), size=1, width=0.25, position=position_dodge(0.5))
plot

但是,我的数据类型通常在我的领域中以不同的方式表示。我需要创建相同的直方图,但条形图将从 x 轴的另一侧开始,就在 x 轴标签上方,如下所示:

我知道这样表示它并没有什么意义,但我必须这样做(因为我想表明 A 实际上比 B 做得更好,这在第一眼看第一张图)。也许使用 ggplot2 根本不可能,因为这不符合 ggplot2 的逻辑?

【问题讨论】:

    标签: r ggplot2 bar-chart


    【解决方案1】:

    如果您愿意接受警告,您可以使用after_scale() 来设置您正在绘制的矩形的ymax 值。

    但是,您需要仔细考虑您对sd 变量所做的操作以及对该值进行日志转换意味着什么(尤其是当它是标准偏差时)。

    library(ggplot2)
    library(scales)
    
    data <- matrix(c("2%","A", 0.00013, 4.94e-06, "6%", "A", 1.7e-05, 7.95e-06, "2%", "B", 3.1e-06, 1.50e-07, "6%", "B", 6.8e-07, 5.04e-07), ncol=4, byrow=TRUE)
    data <- as.data.frame(data); colnames(data) = c("P", "variable", "value", "sd")
    data$value <- as.numeric(as.character(data$value)); data$sd <- as.numeric(as.character(data$sd))
    
    plot <- ggplot(data=data, aes(x=P, y=value, fill=variable)) + 
      geom_bar(stat="identity", color = "black", size = 1, width = 0.5, position = position_dodge(),
               aes(ymax = after_scale(-Inf))) +
      scale_x_discrete(limits=c("2%", "6%")) + 
      scale_y_log10(breaks = trans_breaks("log10", function(x) 10^x)) +  
      geom_errorbar(aes(ymin=value, ymax=sd), size=1, width=0.25, position=position_dodge(0.5))
    #> Warning: Ignoring unknown aesthetics: ymax
    plot
    

    由reprex package (v0.3.0) 于 2021-01-05 创建

    【讨论】:

    • 感谢您指出我在图表类型上的错误。我认为这对我有用,我只是在寻找一种获得这种图形输出的方法。关于如何用这样的图表处理 sd 的任何提示,这确实是一个标准偏差?
    • 您可以计算对数变换空间中的标准差,并在图例或某处提及,这是对数正态假设下的标准差(即rlnorm() 中的sdlog 参数例如)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多