在ggplot/R中,每个刻面改变轴标签格式化程序

我有一个数据框,捕获几个时间的措施,我想可视化一个3×1的方面。然而,每个措施都包含不同的单位/比例,可以从定制转换和标签方案中受益。

所以,我的问题是:如果单位和比例在不同方面有所不同,那么我如何在一个方面指定一个自定义格式化器或转换(即log10)?

例如,假设我有数据:

df = data.frame(dollars=10^rlnorm(50,0,1), counts=rpois(50, 100))
melted.df = melt(df, measure.var=c("dollars", "counts"))

如何设置一个显示美元的2×1方面,并以index = dollars和scale_y_continuous(trans =“log10”,…)为索引,计算df $ dollar数据?

谢谢!

正如你所发现的那样,没有一个容易的解决方案,但它出现了很多。由于这样的事情经常被问到,我觉得有助于解释为什么这很难,并提出一个潜在的解决方案。

我的经验是,来到ggplot2或格子图形的人从根本上误解了刻画(或格子化)的目的。这个功能是以非常具体的想法开发的:跨多个组的数据可视化共享一个共同的尺度。它来自于Tufte等人所倡导的小倍数原理。

视觉设计专家将倾向于避免将面板彼此相邻放置在非常不同的尺度上,因为它最多可以是误导性的。 (我不是在这里骂你,只是解释理由…)

但当然,一旦你在开放的这个伟大的工具,你永远不知道人们将如何使用它。所以它被拉伸:请求进来允许秤按面板变化的能力,并为每个面板分别设置图的各个方面。而且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)

我刚刚猜到你想要使用什么geom_ *,我相信这不是你想要绘制的,但至少说明了这个原则。

翻译自:https://stackoverflow.com/questions/11585954/varying-axis-labels-formatter-per-facet-in-ggplot-r

转载注明原文:在ggplot/R中,每个刻面改变轴标签格式化程序