【问题标题】:How to add titles from a list to a series of histograms?如何将列表中的标题添加到一系列直方图中?
【发布时间】:2014-01-25 12:46:22
【问题描述】:

是否可以通过 apply-family 函数将标题附加到从列表中选择标题的一系列直方图中?

下面的代码创建了三个直方图。我想按顺序从列表(名为“列表”)中给每个不同的名称。我该怎么做?

data <- read.csv("outcome-of-care-measures.csv")
outcome <-data[,c(11,17,23)]
out <- apply(outcome, 2,as.data.frame) 
par(mfrow=c(3,1))
apply(outcome,2, hist, xlim=range(out,na.rm=TRUE), xlab="30 day death rate") 

【问题讨论】:

  • 我已经编辑了你的问题。如果您觉得我做错了,请随时恢复我的编辑。
  • @user1895420 谢谢 :)

标签: r histogram graphing


【解决方案1】:

我会使用ggplot2 中的facet_wrap 来完成这项工作。 ggplot2 非常无痛支持这种剧情:

library(ggplot2)
theme_set(theme_bw())

df = data.frame(values = rnorm(3000), ID = rep(LETTERS[1:3], each = 1000))
ggplot(df, aes(x = values)) + geom_histogram() + facet_wrap(~ ID)

要更改每个方面上方框中的文本,只需替换 ID 变量中的文本:

id_to_text_translator = c(A = 'Facet text for A',
                          B = 'Facet text for B',
                          C = 'Facet text for C')
df$ID = id_to_text_translator[df$ID]

我建议仔细看看这两行发生了什么。使用向量化子集来执行这种替换具有紧凑的语法和高性能。替换此代码需要 forapply 循环以及一组 if 语句,这会使代码更长更慢。

另一种选择是直接影响IDlevels,即factor

levels(df$ID) = id_to_text_translator[levels(df$ID)]

这要快得多,尤其是在具有大量行的数据集上。此外,它保留IDfactor,而之前的解决方案使ID 成为character 向量。

结果图:

ggplot(df, aes(x = values)) + geom_histogram() + facet_wrap(~ ID)

【讨论】:

  • 很好,但如果我想要不同的、更清晰的每个直方图的名称?或者从列表中挑选的名字我怎么能做到这一点?
  • + ggplot 的 Inf!这真的很棒。 Here is the documentation:对于实际上是 facets 名称的“标题”,我将相应地修改我的数据。
【解决方案2】:

由于不仅是列,还有另一个参数会发生变化,因此您可以使用 mapply 来获得 apply 系列中的函数。

args <- list(xlim=range(data, na.rm=TRUE), xlab="30 day death rate")
titles <- list("Title 1", "Title 2", "Title 3")
par(mfrow=c(3,1))
mapply(hist, data, main=titles, MoreArgs=args)

如果将invisible 函数包裹在最后一行,则可以避免控制台输出。

注意:我认为在这里使用循环要简单得多。

【讨论】:

  • 我正在尝试使用 github 数据“outcome-of-care-measures.csv”。但我没有像你一样到达那里的情节。
  • 我的情节使用随机数据。添加数据链接以使您的示例完全可重现。
  • @MarkHeckmann 这接近我最初的想法,如果可能的话,使用 apply-family 而不是循环。但似乎不适用于特定情况和/或此数据。我得到的是 hist.default(dots[[1L]][[4L]], main = dots[[2L]][[1L]], xlab = "30 day death rate", : invalid number '休息'
  • 请使您的示例(在您上面的问题中)完整且可重复。目前我们不知道代码失败的原因,也没有提供额外反馈的信息。
猜你喜欢
  • 1970-01-01
  • 2012-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-22
  • 2023-03-08
  • 2018-01-27
相关资源
最近更新 更多