【问题标题】:How do you create a bar plot for two variables mirrored across the x-axis in R?如何为 R 中跨 x 轴镜像的两个变量创建条形图?
【发布时间】:2011-08-09 15:56:34
【问题描述】:

我有一个数据集,其中包含一个 x 变量和两个 y1 和 y2 变量(总共 3 列)。我想将 y1 与 x 绘制为轴上方的条形图,并将 y2 与 x 轴下方同一图中的相同 x 绘制,以便两个条形图相互镜像。

下面的图 D 是我正在尝试做的一个示例。

【问题讨论】:

  • 你是如何制作图 A 的?我对图片上的马很好奇

标签: r graph plot


【解决方案1】:

使用ggplot 你可以按如下方式进行:

设置数据。这里没有什么奇怪的,但显然低于轴的值将是负数。

dat <- data.frame(
    group = rep(c("Above", "Below"), each=10),
    x = rep(1:10, 2),
    y = c(runif(10, 0, 1), runif(10, -1, 0))
)

使用ggplotgeom_bar 绘图。要防止geom_bar 汇总数据,请指定stat="identity"。同样,需要通过指定position="identity" 来禁用堆叠。

library(ggplot2)
ggplot(dat, aes(x=x, y=y, fill=group)) + 
  geom_bar(stat="identity", position="identity")

【讨论】:

    【解决方案2】:

    使用@Andrie 的示例数据的基本图形和lattice 的一些非常小的示例:

    dat <- data.frame(
        group = rep(c("Above", "Below"), each=10),
        x = rep(1:10, 2),
        y = c(runif(10, 0, 1), runif(10, -1, 0))
    )
    

    在基础图形中:

    plot(c(0,12),range(dat$y),type = "n")
    barplot(height = dat$y[dat$group == 'Above'],add = TRUE,axes = FALSE)
    barplot(height = dat$y[dat$group == 'Below'],add = TRUE,axes = FALSE)
    

    lattice:

    barchart(y~x,data = dat, origin = 0, horizontal = FALSE)
    

    【讨论】:

      【解决方案3】:

      这是用 ggplot2 完成的。 先提供一些数据,把两个y和melt放在一起。

      library(ggplot2)
      
      dtfrm <- data.frame(x = 1:10, y1 = rnorm(10, 50, 10), y2 = -rnorm(10, 50, 10))
      dtfrm.molten <- melt(dtfrm, id = "x")
      

      然后,制作图表

      ggplot(dtfrm.molten, aes(x , value, fill = variable)) + 
        geom_bar(stat = "identity", position = "identity")
      

      也许其他人可以提供带有基数和/或格子的示例。

      HTH

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-08-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多