ggplot/R中每个方面的不同轴标签格式化程序
我有一个数据帧,随着时间的推移捕获了几个度量,我希望将其可视化为3x1方面。但是,每个度量值都包含不同的单位/比例,这些单位/比例将受益于自定义转换和标记方案 因此,我的问题是:如果不同方面的单位和比例不同,我如何指定自定义格式化程序或转换(即log10)到方面内的特定轴? 例如,假设我有以下数据: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=
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”,…)
谢谢大家! 正如您所发现的,解决这个问题并不容易,但它会带来很多问题。由于这类问题经常被问到,我发现解释为什么这很难,并提出一个可能的解决方案是很有帮助的 我的经验是,来到ggplot2或lattice图形的人从根本上误解了切面(或网格,在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我发现在单个面板上刻面是一种方便的方式,可以添加一个视觉上吸引人且不占用太多空间的“标题”。