簡體   English   中英

R:如何用變量填充ggplot2中的點

[英]R: How to Fill Points in ggplot2 with a variable

我正在嘗試制作一個ggplot2散點圖 plot,它按 R 中的垃圾箱分組。我成功制作了第一個 model,我沒有嘗試更改填充。 但是當我試圖讓散點圖 plot 的填充基於我的變量(小姐)時,它是一個范圍從 0.00 到 0.46 的數值,它基本上忽略了熱量 map 比例並將所有內容變成灰色。

   ggplot(data = RightFB, mapping = aes(x = TMHrzBrk, y = TMIndVertBrk))+
   geom_bin_2d(bins = 15)+
   scale_fill_continuous(type = "viridis")+
   ylim(5, 20)+
   xlim(0,15)+
   coord_fixed(1.3)


   ggplot(data = RightFB, mapping = aes(x = TMHrzBrk, y = TMIndVertBrk, fill 
   =Miss.))+
   geom_bin_2d(bins = 15)+
   scale_fill_continuous(type = "viridis")+
   ylim(5, 20)+
   xlim(0,15)+
   coord_fixed(1.3)

感謝您的幫助! 謝謝!

我理解你的問題,所以讓我們用一個可重現的例子來復制它。 顯然我們沒有您的數據,但以下數據框與您自己的數據具有相同的名稱、類型和范圍,因此本演練應該適合您。

set.seed(1)

RightFB <- data.frame(TMHrzBrk = runif(1000, 0, 15),
                      TMIndVertBrk = runif(1000, 5, 20),
                      Miss. = runif(1000, 0, 0.46))

你的第一個 plot 看起來像這樣:

library(tidyverse)

ggplot(data = RightFB, mapping = aes(x = TMHrzBrk, y = TMIndVertBrk)) +
  geom_bin_2d(bins = 15) +
  scale_fill_continuous(type = "viridis") +
  ylim(5, 20) +
  xlim(0, 15) +
  coord_fixed(1.3)
#> Warning: Removed 56 rows containing missing values (`geom_tile()`).

在這里,填充 colors 表示每個 bin 中的觀察計數。 但是,如果您嘗試將 map 填充為Miss. ,則會得到所有灰色方塊:

ggplot(data = RightFB, mapping = aes(x = TMHrzBrk, y = TMIndVertBrk,
                                     fill = Miss.)) +
  geom_bin_2d(bins = 15) +
  scale_fill_continuous(type = "viridis") +
  ylim(5, 20) +
  xlim(0, 15) +
  coord_fixed(1.3)
#> Warning: The following aesthetics were dropped during statistical transformation: fill
#> i This can happen when ggplot fails to infer the correct grouping structure in
#>   the data.
#> i Did you forget to specify a `group` aesthetic or to convert a numerical
#>   variable into a factor?
#> Removed 56 rows containing missing values (`geom_tile()`).

發生這種情況的原因是默認情況下geom_bin_2d計算箱子和每個箱子內的計數以獲得填充變量。 每個 bin 中有多個觀察值,它們都有不同的Miss.值。 此外, geom_bin_2d不知道你想用這個變量做什么。 我的猜測是您正在尋找每個 bin 中Miss.平均值,但這很難在geom_bin_2d的框架內實現。

另一種方法是自己計算 bins,在每個 bin 中獲取Miss.的平均值,並將 plot 作為geom_tile

RightFB %>%
  mutate(TMHrzBrk = cut(TMHrzBrk, breaks = seq(0, 15, 1), seq(0.5, 14.5, 1)),
         TMIndVertBrk = cut(TMIndVertBrk, seq(5, 20, 1), seq(5.5, 19.5, 1))) %>%
  group_by(TMHrzBrk, TMIndVertBrk) %>%
  summarize(Miss. = mean(Miss., na.rm = TRUE), .groups = "drop") %>%
  mutate(across(TMHrzBrk:TMIndVertBrk, ~as.numeric(as.character(.x)))) %>%
  ggplot(aes(x = TMHrzBrk, y = TMIndVertBrk, fill = Miss.)) +
  geom_tile() +
  scale_fill_continuous(type = "viridis") +
  ylim(5, 20) +
  xlim(0, 15) +
  coord_fixed(1.3)


編輯

通過評論中數據的鏈接,這里有一個完整的代表:

library(tidyverse)

RightFB <- read.csv(paste0("https://raw.githubusercontent.com/rileyfeltner/",
                           "FB-Analysis/main/Right%20FB.csv"))

RightFB <- RightFB[c(2:6, 9, 11, 13, 18, 19)]
RightFB$Miss. <- as.numeric(as.character(RightFB$Miss.))
#> Warning: NAs introduced by coercion
RightFB$TMIndVertBrk <- as.numeric(as.character(RightFB$TMIndVertBrk))
#> Warning: NAs introduced by coercion
RightFB <- na.omit(RightFB)
RightFB1 <- filter(RightFB, P > 24)

RightFB %>%
  mutate(TMHrzBrk = cut(TMHrzBrk, breaks = seq(0, 15, 1), seq(0.5, 14.5, 1)),
         TMIndVertBrk = cut(TMIndVertBrk, seq(5, 20, 1), seq(5.5, 19.5, 1))) %>%
  group_by(TMHrzBrk, TMIndVertBrk) %>%
  summarize(Miss. = mean(Miss., na.rm = TRUE), .groups = "drop") %>%
  mutate(across(TMHrzBrk:TMIndVertBrk, ~as.numeric(as.character(.x)))) %>%
  ggplot(aes(x = TMHrzBrk, y = TMIndVertBrk, fill = Miss.)) +
  geom_tile() +
  scale_fill_continuous(type = "viridis") +
  ylim(5, 20) +
  xlim(0, 15) +
  coord_fixed(1.3)
#> Warning: Removed 18 rows containing missing values (`geom_tile()`).

創建於 2022-11-23,使用reprex v2.0.2

暫無
暫無

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

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