gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 09:35:57 25 4
gpt4 key购买 nike

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

这是我的代码:

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/

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