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")
我有一个数据框 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")