r - 向格子条形图中的面板添加文本

标签 r panel label bar-chart lattice

我尝试在具有多个面板的格状条形图中向条形添加标签。我最终得到了太多标签(每个标签都在每个面板中)。

这是我的代码:

library(lattice)
data(iris)

barchart(seq(1,50) ~ Petal.Width + Petal.Length | Species, data = iris, stack = TRUE,
         panel=function(x, y, ...) {
               panel.barchart(x, y, ...);
               ltext(x=iris$Petal.Width/2, y=y, labels=iris$Petal.Width, cex = 0.5);
               ltext(x=iris$Petal.Width + iris$Petal.Length/2, y=y, labels=iris$Petal.Width, cex = 0.5);
         }
)

我该怎么做?

额外问题:
除了它没有按预期工作之外,我认为我的代码效率不是很高(尤其是 seq(1,50)Petal.Width + Petal.Length)。有没有更好的办法?

提前谢谢你!!!

最佳答案

这里的根本问题是如何在 lattice 中为堆积条形图添加标签.答案在 this question 中提供,但由于链接的答案没有多个面板,因此我在这里使用 base R 重新创建了一个更简单的答案:

你必须修改面板功能如下:

  • 计算每个 y 值的 x 值的累积和
  • 这是一个经典的拆分、应用、组合问题。您可以使用plyr为此(如链接的答案中所示),或者,如我所示,splitdo.call :

xx <- do.call(c, unname(lapply(split(x, y), function(t)cumsum(t)-t/2)))

代码:

barchart( 1:10 ~ Petal.Width + Petal.Length | Species, 
          data = iris[c(1:10, 51:60, 101:110), ], 
          stack = TRUE,
          panel=function(x, y, ...) {
            panel.barchart(x, y, ...)
            xx <- do.call(c, unname(lapply(split(x, y), function(t)cumsum(t)-t/2)))
            ltext(xx, y=y, labels=x)
         }
)

enter image description here

关于r - 向格子条形图中的面板添加文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7978024/

相关文章:

r - 来自子/父关系的分层数据框架

c# - 当在其上绘制线条时,滚动条不会出现在面板上 (C#)

java - 加载 JLabel 图标看起来变色

r - 如何更改r中的树状图标签

r - R 中 ggplot2 yaxis 标签中的 "Squared"上标

r for 循环在单个数据框中导入 xlsx 文件

c# - 在 C# 中的另一个控件值之前添加控件值

java - Wicket 标签 + Ajax 不工作

r - 将函数列表应用于值向量

c# - 如何获取面板的可见边界