gpt4 book ai didi

r - 将 ggplot2 和 facet_grid 一起用于连续变量和分类变量 (R)

转载 作者:行者123 更新时间:2023-12-05 03:50:15 24 4
gpt4 key购买 nike

我正在尝试制作一系列这样的图表:

enter image description here

我有一些混合的分类数据和连续数据。当只有分类变量或只有连续变量时,我能够制作这一系列图表。但是当同时存在两种类型的变量时,我无法生成这一系列图表。

我在下面创建了一些数据。有没有办法调试此代码以生成一系列图表?

library(ggplot2) 
library(gridExtra)
library(tidyr)

/create some data/

var_1 <- rnorm(100,1,4)
var_2 <- sample( LETTERS[1:2], 100, replace=TRUE, prob=c(0.3, 0.7) )
var_3 <- sample( LETTERS[1:5], 100, replace=TRUE, prob=c(0.2, 0.2,0.2,0.2, 0.1) )
cluster <- sample( LETTERS[1:4], 100, replace=TRUE, prob=c(2.5, 2.5, 2.5, 2.5) )

/put in a frame/

f <- data.frame(var_1, var_2, var_3, cluster)

/convert to factors/

f$var_2 = as.factor(f$var_2)
f$var_3 = as.factor(f$var_3)
f$cluster = as.factor(f$cluster)

/create graphs/

f2 %>% pivot_longer(cols = contains("var"), names_to = "variable") %>%
ggplot(aes(x = value, fill = value)) +
geom_bar() + geom_density() +
facet_grid(rows = vars(cluster),
cols = vars(variable),
scales = "free") +
labs(y = "freq", fill = "Var")

当我只有分类变量时,以下代码有效:

var_2 <- sample( LETTERS[1:2], 100, replace=TRUE, prob=c(0.3, 0.7) )

var_3 <- sample( LETTERS[1:5], 100, replace=TRUE, prob=c(0.2, 0.2,0.2,0.2, 0.1) )

cluster <- sample( LETTERS[1:4], 100, replace=TRUE, prob=c(2.5, 2.5, 2.5, 2.5) )

f <- data.frame(var_2, var_3, cluster)
f$var_2 = as.factor(f$var_2)
f$var_3 = as.factor(f$var_3)
f$cluster = as.factor(f$cluster)

f%>% pivot_longer(cols = contains("var"), names_to = "variable") %>% ggplot(aes(x = value, fill = value)) + geom_bar() + geom_density() +facet_grid(rows = vars(cluster), cols = vars(variable), scales = "free") + labs(y = "freq", fill = "Var")

最佳答案

我不认为 ggplot 可以处理 y 中的连续变量和分类变量。或 x 审美。但是在 pivot_longer() 中混合它们时也会出错.

Error: Can't combine `var_1` <double> and `var_2` <character>.

我的建议是为每个指标创建单独的图,然后合并这些图。这将使您更好地控制每个情节。这是一个使用 GGally 的 ggmatrix() 的例子.我相信 gridextra 也可以做到这一点.

library(ggplot2)
library(gridExtra)
library(tidyr)
library(GGally)

# Generate data
var_1 <- rnorm(100, 1, 4)
var_2 <- sample(LETTERS[1:2], 100, replace = TRUE, prob = c(0.3, 0.7))
var_3 <- sample(LETTERS[1:5], 100, replace = TRUE, prob = c(0.2, 0.2, 0.2, 0.2, 0.1))
cluster <- sample(LETTERS[1:4], 100, replace = TRUE,prob = c(2.5, 2.5, 2.5, 2.5))

f <- data.frame(var_1, var_2, var_3, cluster)

f$var_2 = as.factor(f$var_2)
f$var_3 = as.factor(f$var_3)
f$cluster = as.factor(f$cluster)

# Create plots for each var
var_1_plot <- f %>%
ggplot(aes(x = var_1,
fill = cluster)) +
geom_density() +
facet_grid(cluster ~ .,
scales = "free")
var_2_plot <- f %>%
ggplot(aes(x = var_2,
fill = cluster)) +
geom_bar() +
facet_grid(cluster ~ .,
scales = "free")

var_3_plot <- f %>%
ggplot(aes(x = var_3,
fill = cluster)) +
geom_bar() +
facet_grid(cluster ~ .,
scales = "free")

# Combine all plots
plot_list <- list(var_1_plot, var_2_plot, var_3_plot)
GGally::ggmatrix(
plots = plot_list,
nrow = 1,
ncol = 3,
xAxisLabels = c("Var 1", "Var 2", "Var 3"),
)

enter image description here

关于r - 将 ggplot2 和 facet_grid 一起用于连续变量和分类变量 (R),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63543604/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com