我使用了以下ggplot命令:
ggplot(调查,不良事件(x=年龄))+stat_bin(不良事件(n=nrow(h3),y=…计数../n),binwidth=10)
+连续缩放(formatter=“percent”,breaks=c(0,0.1,0.2))
+分面网格(医院~)
+主题(panel.background=theme\u blank())
产生
但是,我想将刻面标签更改为较短的标签(如Hosp 1,Hosp 2…),因为它们现在太长,看起来很狭窄(增加图形的高度不是一个选项,它会占用文档中太多的空间)。我查看了facet_grid帮助页面,但不知道如何操作
以下是一个避免编辑数据的解决方案:
假设您的绘图由数据帧的组部分分面,该部分具有级别控件、test1、test2,然后创建一个由这些值命名的列表:
医院名称<;-名单(
“医院#1”=“某医院”,
“医院#2”=“另一家医院”,
“医院3号”=“医院3号”,
“医院#4”=“另一家医院”
)
然后创建一个“labeller”函数,并将其推入facet\u网格调用:
医院贴标机<;-函数(变量、值){
返回(医院名称[值])
}
ggplot(调查,不良事件(x=年龄))+统计数据(不良事件(n=nrow(h3),y=计数../n),数据宽度=10)
+刻面网格(医院,贴标机=医院贴标机)
...
这将使用数据框的级别为医院名称列表编制索引,并返回列表值(正确的名称)
请注意,只有当您只有一个刻面变量时,这才有效。如果有两个方面,那么labeller函数需要为每个方面返回不同的名称向量。您可以通过以下方式完成此操作:
绘图机<;-函数(变量、值){
如果(变量=='facet1'){
返回(facet1_名称[值])
}否则{
返回(facet2_名称[值])
}
}
其中,facet1_名称和facet2_名称是按facet索引名称(Hostpital#1’等)索引的预定义名称列表
编辑:如果您传递了一个labeller不知道的变量/值组合,则上述方法将失败。您可以为未知变量添加故障保护,如下所示:
绘图机<;-函数(变量、值){
如果(变量=='facet1'){
返回(facet1_名称[值])
}else if(变量=='facet2'){
返回(facet2_名称[值])
}否则{
返回(作为字符(值))
}
}
答案改编自如何更改ggplot中的strip.text标签,其中facet和margin=TRUE
编辑:警告:如果使用此方法按字符列刻面,则可能会得到不正确的标签。请参阅此错误报告。已在ggplot2的最新版本中修复