我有一个数据框,随着时间的推移捕获了几个我希望可视化3x1方面的措施.但是,每个度量包含不同的单位/比例,这些单位/比例将受益于自定义转换和标签方案.
所以,我的问题是:如果不同方面的单位和比例不同,我如何指定自定义格式器或转换(即log10)到构面内的特定轴?
例如,假设我有数据:
df = data.frame(dollars=10^rlnorm(50,0,1), counts=rpois(50, 100))
melted.df = melt(df, measure.var=c("dollars", "counts"))
Run Code Online (Sandbox Code Playgroud)
如何将一个走在设置显示随用食指美元和计数2×1面labels=dollars,并scale_y_continuous(trans = "log10", ...)为df$dollars数据?
谢谢!
jor*_*ran 43
正如您所发现的那样,没有一个简单的解决方案,但它出现了很多.由于这种事情经常被问到,我觉得解释为什么这很困难很有帮助,并建议一个潜在的解决方案.
我的经验是,人们来到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)
Run Code Online (Sandbox Code Playgroud)

我猜想geom_*你想要使用什么,我确信这不是你想要绘制的,但至少它说明了原理.