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

the*_*ond 1 r histogram ggplot2

我有一个data包含 9 个预测变量和一个ind值为 0 到 3 的指示变量的数据框。我需要为给定值为 的所有变量制作直方图ind。我已经写了一些代码;没有更好的主意,我只是将数据集分为 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')
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

更重要的是,我希望能够比较不同值的直方图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))
Run Code Online (Sandbox Code Playgroud)

但这不起作用。我也读过有关 的内容facet_grid_sc(),但也有一个问题。

che*_*123 6

看起来您的数据集可以使用一些整理,但除了数据整理原则之外,您似乎希望单独控制每个方面的比例 - 我是对的吗?

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)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

lemon::facet_rep_wrap()这是使用自由 y 尺度的相同绘图:

ggplot(diamonds, aes(x=price, fill=cut)) +
  geom_histogram() +
  facet_rep_wrap(~cut, scales="free")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述