【问题标题】:Lattice barchart with correct spaces between columns列之间具有正确间距的格条形图
【发布时间】:2019-09-10 15:44:30
【问题描述】:

我还有一个格子问题。假设我用这段代码绘制条形图:

require(lattice)
data <- data.frame(x = c(1,7,10,14,20,21), y = c(0.1,0.6,0.4,0.5,0.3,0.7))
barchart(data$y ~ data$x, horizontal = FALSE)

生成的图片有问题,因为条形间距相等,但它们不应该是因为x 实际上在值之间有很多差距。例如,对于 x = 1 和 x = 7,我需要 6 个单位的空白空间。我该如何解决这个问题?

【问题讨论】:

    标签: r plot lattice


    【解决方案1】:

    这个呢:

    require(ggplot2)
    ggplot(data, aes(x, y)) + geom_bar(stat='identity', fill='lightblue') + theme_classic()
    

    【讨论】:

    • 不幸的是,对于当前项目,一切都需要在 lattice 中完成。我认为以不同的方式设置数据可能会奏效,即将每个间隙点映射到 0。我现在就试试。
    【解决方案2】:

    使用xyplot 并指定面板功能怎么样?这会将 x 值保留为数值,而不是允许 barchart 将它们转换为因子。使用panel = function(...) panel.barchart(...) 形式,您可以添加其他选项来控制条形图的出现。

    require(lattice)
    xyplot(y ~ x, data, panel = panel.barchart, horizontal = FALSE)
    

    附:我建议您避免使用显式的 data$xdata$y 形式,并允许函数评估提供给函数的数据中的变量。当事情发生变化时,显式引用通常会导致意想不到的结果。

    【讨论】:

      【解决方案3】:

      您可以将x 转换为一个因子,填充所有级别,然后根据xtabs 的输出绘制条形图:

      data$x <- factor(data$x, levels=1:max(data$x))
      tab <- xtabs(y ~ x, data)
      tab <- ifelse(tab == 0, NA, tab)  # So there aren't line segments at y=0
      barchart(tab, horizontal=FALSE, xlab='x', ylab='y',
               scales=list(tck=c(1, 0)))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-07-22
        相关资源
        最近更新 更多