ggplot/R中每个方面的不同轴标签格式化程序

ggplot/R中每个方面的不同轴标签格式化程序,r,facets,ggplot2,R,Facets,Ggplot2,我有一个数据帧,随着时间的推移捕获了几个度量,我希望将其可视化为3x1方面。但是,每个度量值都包含不同的单位/比例,这些单位/比例将受益于自定义转换和标记方案 因此,我的问题是:如果不同方面的单位和比例不同,我如何指定自定义格式化程序或转换(即log10)到方面内的特定轴? 例如,假设我有以下数据: df = data.frame(dollars=10^rlnorm(50,0,1), counts=rpois(50, 100)) melted.df = melt(df, measure.var=

我有一个数据帧,随着时间的推移捕获了几个度量,我希望将其可视化为3x1方面。但是,每个度量值都包含不同的单位/比例,这些单位/比例将受益于自定义转换和标记方案

因此,我的问题是:如果不同方面的单位和比例不同,我如何指定自定义格式化程序或转换(即log10)到方面内的特定轴?

例如,假设我有以下数据:

df = data.frame(dollars=10^rlnorm(50,0,1), counts=rpois(50, 100))
melted.df = melt(df, measure.var=c("dollars", "counts"))
对于
df$美元
数据,如何设置一个2x1刻面,显示指数上的美元和计数,并使用
标签=美元
连续缩放(trans=“log10”,…)


谢谢大家!

正如您所发现的,解决这个问题并不容易,但它会带来很多问题。由于这类问题经常被问到,我发现解释为什么这很难,并提出一个可能的解决方案是很有帮助的

我的经验是,来到ggplot2lattice图形的人从根本上误解了切面(或网格,在lattice中)的目的。这项功能的开发考虑到了一个非常具体的想法:跨共享一个共同尺度的多个组的数据可视化。它来自塔夫特和其他人信奉的所谓小倍数原则

视觉设计专家往往会避免将不同比例的面板相邻放置,因为这样做充其量也会产生误导。(我不是在这里骂你,只是解释一下理由…)

但当然,一旦你有了这个伟大的工具,你永远不知道人们将如何使用它。因此,它变得很紧张:请求能够允许比例随面板而变化,并为每个面板分别设置绘图的各个方面。因此,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)
库(gridExtra)

是的。嘘。我刚刚看到这个链接,其中有人有一个类似的问题:。可能更容易做两个单独的情节,并将它们安排在一起。感谢您的有见地的回应!我完全理解偏离ggplot2最初设计意图的含义。实际上,我有两个数据集,其中一个遵循正态分布,而另一个遵循对数正态分布,所以我希望能够跨时间比较可视化的标准化数据。您对正确对齐绘图区域有何见解?我以前遇到过
ggExtra
库,它应该为这提供了一些特别的支持,但我很感激任何关于这方面的指导。@StefanNovak我很高兴它有帮助!我想再次强调,我不是在批评你的设计选择。SO问题的一个原则是它们“永远存在”,因此应该不仅仅服务于最初的提问者。正如我所说,这一点反复出现,因此我的解释更针对未来的读者,而不是你。@StefanNovak好吧,黑客的方法是调整轴刻度标签,使其具有相同的位数,即使这意味着用空格填充标签。我相信以前也有人问过这个问题……我会看看能不能找到什么相关的。再次感谢!我可以使用
网格。排列
绘图。边距
相结合,在每个子图的对齐方向上移动。@101我发现在单个面板上刻面是一种方便的方式,可以添加一个视觉上吸引人且不占用太多空间的“标题”。