簡體   English   中英

在 R 中操作 ggplor2 的分類/連續變量

[英]Manipulating ggplor2 for categorical/continuous variables in R

我試圖在 R 中繪制分類變量和連續變量。以下代碼在沒有“var_4”的情況下工作,但我似乎無法讓它與所有變量一起工作。

誰能建議如何解決這個問題? 另外,是否可以修改 aes() 函數,以便每個圖形中的條形根據不同的類別具有不同的顏色?


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

# 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)) 

var_4 <- rnorm(100, 1, 10)

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

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

levs <- sort(unique(c(as.character(f$var_2), as.character(f$var_3))))

f$var_2 <- as.numeric(factor(f$var_2, levs)) + ceiling(max(f$var_1)) + 10 
f$var_3 <- as.numeric(factor(f$var_3, levs)) + ceiling(max(f$var_1)) + 10

breaks <- c(pretty(range(f$var_1)), sort(unique(c(f$var_2, f$var_3))))

labs <- c(pretty(range(f$var_1)), levs)

f <- pivot_longer(f, cols = c("var_1", "var_2", "var_3", "var_4")) 

ggplot(f, aes(x = value)) + geom_density(data = subset(f, name == "var_1")) + 
  geom_bar(data = subset(f, name != "var_1"), aes(fill = name)) + 
  facet_wrap(cluster~name, ncol = 3, scales = "free") + 
  scale_x_continuous(breaks = breaks, labels = labs) + 
  scale_fill_manual(values = c("deepskyblue4", "gold"), guide = guide_none())

我認為這里的問題是你已經接受了我對你之前問題的回答,並試圖在沒有真正理解各個部分做了什么的情況下進行調整。

正如我之前解釋的那樣,不應將刻面用作將不相關的圖拼接在一起的一種方式。 這是可能的,但它是hacky 並限制了可擴展性。 嘗試為條形着色添加另一個變量和自定義填充比例幾乎是可能的,但這意味着進一步的調整和妥協。 除非您知道所有部分的作用,否則很難將此方法應用於您的真實數據。 為了清楚起見,我添加了一些評論:

# 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)) 
var_4 <- rnorm(100, 1, 10)

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

f$var_2 = as.factor(f$var_2) 
f$var_3 = as.factor(f$var_3) 
f$cluster = as.factor(f$cluster)
# Reorganise factor data into numeric values, grabbing levels as labels first
levs <- sort(unique(c(as.character(f$var_2), as.character(f$var_3))))

f$var_2 <- as.numeric(factor(f$var_2, levs)) + ceiling(max(f$var_1)) + 1000
f$var_3 <- as.numeric(factor(f$var_3, levs)) + ceiling(max(f$var_1)) + 1000

# Calculate the breaks and labels for the x axis
breaks <- c(pretty(range(c(f$var_1, f$var_4)), 8), sort(unique(c(f$var_2, f$var_3))))
labs <- c(pretty(range(c(f$var_1, f$var_4)), 8), levs)

# Pivot data
f <- pivot_longer(f, cols = c("var_1", "var_2", "var_3", "var_4")) 

現在我們可以繪制:

ggplot(f, aes(x = value)) + 
  geom_density(data = subset(f, name == "var_1")) + 
  geom_density(data = subset(f, name == "var_4")) +
  geom_bar(data = subset(f, name != "var_1" & name != "var_4"), 
           aes(fill = factor(value))) + 
  facet_wrap(cluster~name, ncol = 4, scales = "free") + 
  scale_x_continuous(breaks = breaks, labels = labs) + 
  scale_fill_manual(values = c("red", "orange", "gold", "forestgreen", "deepskyblue4"), 
                    guide = guide_none())

在此處輸入圖片說明

當我運行它時,拋出的錯誤是“錯誤:手動比例中的值不足。需要 3 個,但只提供了 2 個。”

在最后一行中,您只列出了兩種填充顏色。 我添加了“紅色”並生成了一個圖表

ggplot(f, aes(x = value)) + 
    geom_density(data = subset(f, name == "var_1")) + 
    geom_bar(data = subset(f, name != "var_1"), aes(fill = name)) + 
    facet_wrap(cluster~name, ncol = 3, scales = "free") + 
    scale_x_continuous(breaks = breaks, labels = labs) + 
    scale_fill_manual(values = c("deepskyblue4", "gold", "red"), 
     guide = guide_none())

如果您遇到錯誤,將其與您的問題一起發布會很有幫助。

結果圖(這是您想要的嗎?): 在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM