我有这个 Dataframe :
x <- data.frame(
Date = factor(rep(
c("12/1/2011", "1/2/2012", "2/1/2012", "2/10/2012", "2/13/2012"),
3
)),
Server = factor(rep(c("A", "B", "C"), each = 5L)),
FileSystem = factor(c(
"/", "/var", "tmp", "/db", "/app", "C:", "D:", "F:", "/restore",
"G:", "/", "/tmp", "/data", "/Storage", "/database"
)),
PercentUsed = c(
60L, 50L, 90L, 86L, 90L, 67L, 67L, 34L, 89L, 56L, 90L, 78L,
67L, 34L, 12L
)
)
x
#> Date Server FileSystem PercentUsed
#> 1 12/1/2011 A / 60
#> 2 1/2/2012 A /var 50
#> 3 2/1/2012 A tmp 90
#> 4 2/10/2012 A /db 86
#> 5 2/13/2012 A /app 90
#> 6 12/1/2011 B C: 67
#> 7 1/2/2012 B D: 67
#> 8 2/1/2012 B F: 34
#> 9 2/10/2012 B /restore 89
#> 10 2/13/2012 B G: 56
#> 11 12/1/2011 C / 90
#> 12 1/2/2012 C /tmp 78
#> 13 2/1/2012 C /data 67
#> 14 2/10/2012 C /Storage 34
#> 15 2/13/2012 C /database 12
我想在每个facet_wrap
网格旁边放一个图例,它自己的FileSystem
:
当我这样做时,它会将图例放在所有FileSystem
的图的一侧。是否可以将FileSystem
属于每个网格旁边的每个服务器?
ggplot(x, aes(Date, PercentUsed, group=1, colour=FileSystem)) +
geom_jitter(size=0.5) + geom_smooth(method="loess", se=T) +
facet_wrap(~Server, ncol=1)
5条答案
按热度按时间hec6srdp1#
Meh,@joran比我早到了(我的
gridExtra
已经过时了,但我花了10分钟才意识到)。这里有一个类似的解决方案,但是这个解决方案通常是按Server
中的级别来剥皮的。bd1hkmkf2#
最好的方法是使用gridExtra包:
ycggw6v23#
我们可以不使用面,而是为每个组创建一个图列表,然后使用 cowplot::plot_grid 进行绘图。每个人都有自己的传奇:
正如@Axeman所建议的,我们可以使用
facet_grid(~Server)
而不是labels = levels(x$Server)
来添加标签。pvabu6sv4#
我喜欢@joran的回答,并提供了几个基于他们代码的选项作为起点。两个选项都解决了未对准面的问题。
面外图例
如果您为图例项选择等宽字体,则可以使用
str_pad
在所有图例项的右侧添加填充,以强制每个图例项的长度保持一致。如果您愿意使用等宽字体,这是一个快速解决方案。
facet内部图例
如果你不介意每个facet中的图例,你可以在
scale
调用中使用“expand”参数为每个facet添加额外的空间:nmpmafwu5#
除了
gridExtra
和cowplot
,现在游戏中还有patchwork
。因此,您可以执行以下操作:您也可以手动合并图,看看here。我使用了
df
的OP数据。