这里有一个避免编辑数据的解决方案:
假设你的图是由你的数据帧的组部分组成的,它有级别控制,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列表,并返回列表值(正确的名称)。
请注意,这仅适用于只有一个facet变量的情况。如果您有两个facet,那么您的labeller函数需要为每个facet返回不同的name向量。你可以这样做:
plot_labeller <- function(variable,value){
if (variable=='facet1') {
return(facet1_names[value])
} else {
return(facet2_names[value])
}
}
其中facet1_names和facet2_names是由facet索引名('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))
}
}
答自如何改条。ggplot中带有facet和margin=TRUE的文本标签
警告:如果您使用此方法对字符列进行facet,您可能会得到不正确的标签。请参阅此错误报告。在ggplot2的最新版本中修正。