GGplot2 facet_wrap() 对每个变量进行缩放

GGplot2 facet_wrap() with scaling for each variable

我有一个数据框 data,其中包含 9 个预测变量和一个指标变量 ind,其值从 0 到 3。我需要为所有给定值 [= 的变量制作直方图14=]。我已经写了一些代码;没有更好的主意,我只是将我的数据集分成 4 个不相交的子集。

data_no0 <- data[data$ind == 0, -1]
data_no1 <- data[data$ind == 1, -1]
data_no2 <- data[data$ind == 2, -1]
data_no3 <- data[data$ind == 3, -1]

ggplot(gather(data_no1), aes(value)) + 
  geom_histogram(bins = 6) + 
  facet_wrap(~key, scales = 'free_x')

此外,我希望能够 比较直方图 的不同值 ind 所以我想将 x 的最小值和最大值固定为(即对于第一个变量)分别为 min(data$avg_f0env_sma0)max(data$avg_f0env_sma)

我试过这样做:

scales_x <- list(
  'avg_jitterlocal_sma' 
  = scale_y_continuous(limits = c(min(data$avg_jitterlocal_sma), max(data$avg_jitterlocal_sma))),
  'avg_jitterddp_sma' 
  = scale_y_continuous(limits = c(min(data$avg_jitterddp_sma), max(data$avg_jitterddp_sma))),
  'avg_shimmerlocal_sma' 
  = scale_y_continuous(limits = c(min(data$avg_shimmerlocal_sma), max(data$avg_shimmerlocal_sma))),
  'avgx_pcm_fftmag_spectralflux_sma' 
  = scale_y_continuous(limits = c(min(data$avg_pcm_fftmag_spectralflux_sma), max(data$avg_pcm_fftmag_spectralflux_sma))),
  'avg_pcm_fftmag_spectralcentroid_sma' 
  = scale_y_continuous(limits = c(min(data$avg_pcm_fftmag_spectralcentroid_sma), max(data$avg_pcm_fftmag_spectralcentroid_sma))),
  'avg_pcm_fftmag_spectralharmonicity_sma_compare' 
  = scale_y_continuous(limits = c(min(data$avg_pcm_fftmag_spectralharmonicity_sma_compare), max(data$avg_pcm_fftmag_spectralharmonicity_sma_compare))),
  'avg_f0final_sma' 
  = scale_y_continuous(limits = c(min(data$avg_f0final_sma), max(data$avg_f0final_sma))),
  'avg_f0env_sma' 
  = scale_y_continuous(limits = c(min(data$avg_f0env_sma), max(data$avg_f0env_sma))),
  'avg_loudness_sma3' 
  = scale_y_continuous(limits = c(min(data$avg_loudness_sma3), max(data$avg_loudness_sma3)))
)

ggplot(gather(data_no0), aes(value)) + 
  geom_histogram(bins = 6) + 
  facet_wrap(~key, scales = list(x = scales_x))

但是没用。我也读过 facet_grid_sc(),但它也有问题。

看起来您的数据集可以使用一些 tidying,但撇开数据争论原则不谈,您似乎希望单独控制每个方面的比例 - 我说得对吗?

lemon 软件包包含一些有用的函数,包括 facet_rep_wrap()facet_rep_grid()。这些函数的一个有用特性是允许每个面都有不同比例的 y 或 x 轴。这是 diamonds 数据集的示例。

根据 facet_wrap() 切割的价格直方图:

library(ggplot2)
library(lemon)

ggplot(diamonds, aes(x=price, fill=cut)) +
  geom_histogram() +
  facet_wrap(~cut)

这里是使用 lemon::facet_rep_wrap() 和自由 y 刻度的同一图:

ggplot(diamonds, aes(x=price, fill=cut)) +
  geom_histogram() +
  facet_rep_wrap(~cut, scales="free")