如何将列表中的标题添加到一系列直方图中?

时间:2014-01-25 12:46:23

标签: r histogram graphing

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

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

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") 

2 个答案:

答案 0 :(得分:2)

我会使用facet_wrap中的ggplot2来完成此操作。 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)

enter image description here

要更改每个构面上方框中的文字,只需替换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语句相结合,这将使代码更长更慢。

另一种选择是直接影响levels的{​​{1}},ID

factor

速度要快得多,尤其是在行数很多的数据集上。此外,它使levels(df$ID) = id_to_text_translator[levels(df$ID)] 保持ID,而之前的解决方案使factor成为ID向量。

结果图:

character

enter image description here

答案 1 :(得分:1)

由于不仅是列而是另一个更改的参数,您可以使用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函数包裹在最后一行,则可以避免控制台输出。

enter image description here

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