作为你发现的,这个问题并没有简单的解决方案,但它经常出现。由于这种情况经常被问到,我认为解释为什么很难,并提出一个潜在的解决方案是有帮助的。
我的经验是,使用 ggplot2 或 lattice 图形的人们基本上误解了 faceting(或 trellising,在 lattice 中)的目的。这个特性是针对共享公共比例尺的多个组中的数据可视化而开发的。它来自 Tufte 和其他人所倡导的一些叫做小多面体原则的东西。
将具有非常不同比例尺的面板放在一起是视觉设计专家倾向于避免的事情,因为它最多只会产生误导。(我在这里不是责备你,只是解释理由...)
但当然,一旦你把这个伟大的工具公开了,你永远不知道人们会如何使用它。所以 faceting 在 ggplot2 中被扩展得远远超出了其最初的意图。
这样做的一个后果是,由于功能的原始设计意图,有些事情很难实现。这很可能就是其中之一。
好了,解释到此为止。下面是我的解决方案。
关键在于要认识到你 不是在绘制共享比例尺的图表。对我来说,这意味着你甚至不应该考虑使用分面。相反,分别制作每个图,并将它们排列在一起:
library(gridExtra)
p1 <- ggplot(subset(melted.df,variable == 'dollars'),
aes(x = value)) +
facet_wrap(~variable) +
geom_density() +
scale_x_log10(labels = dollar_format())
p2 <- ggplot(subset(melted.df,variable == 'counts'),
aes(x = value)) +
facet_wrap(~variable) +
geom_density()
grid.arrange(p1,p2)
![enter image description here](https://istack.dev59.com/kTejg.webp)
我只是猜测了您想使用的geom_*
,我确定这不是您想绘制的,但至少它说明了原理。