gpt4 book ai didi

r - 如何更改方面标签?

转载 作者:行者123 更新时间:2023-12-03 04:09:06 24 4
gpt4 key购买 nike

我使用了以下ggplot命令:

ggplot(survey, aes(x = age)) + stat_bin(aes(n = nrow(h3), y = ..count.. / n), binwidth = 10)
+ scale_y_continuous(formatter = "percent", breaks = c(0, 0.1, 0.2))
+ facet_grid(hospital ~ .)
+ theme(panel.background = theme_blank())

生产

alt text

但是,我想将facet标签更改为更短的内容(例如Hosp 1Hosp 2...)因为它们现在太长并且看起来很拥挤(增加图表的高度不是一个选择,它会占用文档中太多的空间)。我看了facet_grid帮助页面,但无法弄清楚如何操作。

最佳答案

以下是避免编辑数据的解决方案:

假设您的绘图由数据帧的 group 部分划分,其中具有级别 control、test1、test2,然后创建一个由这些值命名的列表:

hospital_names <- list(
'Hospital#1'="Some Hospital",
'Hospital#2'="Another Hospital",
'Hospital#3'="Hospital Number 3",
'Hospital#4'="The Other Hospital"
)

然后创建一个“labeller”函数,并将其插入您的facet_grid 调用中:

hospital_labeller <- function(variable,value){
return(hospital_names[value])
}

ggplot(survey,aes(x=age)) + stat_bin(aes(n=nrow(h3),y=..count../n), binwidth=10)
+ facet_grid(hospital ~ ., labeller=hospital_labeller)
...

这使用数据帧的级别来索引hospital_names列表,返回列表值(正确的名称)。

<小时/>

请注意,这仅在您只有一个分面变量时才有效。如果您有两个方面,那么您的贴标器函数需要为每个方面返回不同的名称向量。您可以使用以下方法来做到这一点:

plot_labeller <- function(variable,value){
if (variable=='facet1') {
return(facet1_names[value])
} else {
return(facet2_names[value])
}
}

其中 facet1_namesfacet2_names 是由构面索引名称(“Hostpital#1”等)索引的预定义名称列表。

<小时/>

编辑:如果您传递贴标机不知道的变量/值组合,则上述方法将失败。您可以为未知变量添加故障保护,如下所示:

plot_labeller <- function(variable,value){
if (variable=='facet1') {
return(facet1_names[value])
} else if (variable=='facet2') {
return(facet2_names[value])
} else {
return(as.character(value))
}
}
<小时/>

答案改编自how to change strip.text labels in ggplot with facet and margin=TRUE

<小时/>

编辑:警告:如果您使用此方法按字符列进行分面,则可能会得到不正确的标签。请参阅this bug report . 在最新版本的 ggplot2 中已修复。

关于r - 如何更改方面标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3472980/

24 4 0