有没有一种方法可以根据数据框提供的变量填充facet_wrap创建的小平面条带?
示例数据:
第一个月
示例图:p1 = ggplot(data = MYdata, aes(x = farm, y = weight)) + geom_jitter(position = position_jitter(width = 0.3), aes(color = factor(farm)), size = 2.5, alpha = 1) + facet_wrap(~fruit)
我知道如何更改条带的背景颜色(例如,更改为橙色):p1 + theme(strip.background = element_rect(fill="orange"))
是否有办法将MYdata
中变量size
中的值传递给element_rect
中的参数fill
?
基本上,我希望小水果(苹果、李子、梨)的背景色为绿色,大水果(橙子、香蕉、葡萄)的背景色为红色,而不是所有条带的1种颜色。
5条答案
按热度按时间yxyvkwin1#
只需做一点工作,您就可以将绘图与具有正确grob的虚拟gtable结合起来,
v2g6jxz62#
您可以找到此问题的更新答案here。
c3frrgcw3#
我很想知道如何做到这一点,这是一个伟大的想法。一个想法是生成每个图表独立与不同的颜色,因为你这样做,然后使用一些像multiplot或视口显示,然后并排-这将需要更多的工作。
如果你想提取图例,你将需要这种方法-这里是一些代码从哈德利,我发现了一段时间回来
看看它是如何从图表p中提取出来的,然后我把它从图中取出来图例〈- g_legend(p)lwidth〈- sum(legend$width)#如果你想基于这个p〈- p +主题定义视口(legend.position=“none”)
然后你最终画出它
祝你好运
agxfikkp4#
这不是直接为你的facet着色,但这里你有另一个(非常快速和简单)的解决方案,基于facet由两个变量(
size ~ fruit
)而不是一个(~ fruit
):xmq68pz95#
如果你想对条带背景进行不同的填充,你可以使用ggh 4x中的facets来设置
strip_themed()
中更复杂的条带。没有gtables的麻烦,你的绘图仍然是ggplot,所以你可以在之后添加常用的图层/比例/主题选项等。它也适用于网格布局,但是如果你想给垂直条着色,你还需要在
strip_themed()
中设置background_y
参数。由reprex package(v2.0.1)于2023年1月4日创建
免责声明:我是ggh 4x的作者