簡體   English   中英

如何從 R 中的頻率表創建堆積條形圖?

[英]How do I create a stacked bar chart from a frequency table in R?

如果我有一張看起來像這樣的表:

  V1 V2 V3 V4
A 12 10 10 10
T 13 14 13 10
G 19 08 13 10
C 12 13 17 10

其中數字是列中每個字母的頻率,我將如何創建一個堆積條形圖,其中列名在 x 軸上,頻率是繪制的值? 我不知道如何用 ggplot2 做到這一點。 列沒有名稱,因為列數根據另一個函數是可變的,所以我想自動創建條形圖。

我有點晚了,但這是我的看法。

txt <- "  V1 V2 V3 V4
A 12 10 10 10
T 13 14 13 10
G 19 08 13 10
C 12 13 17 10"

dat <- read.table(text = txt, h=T, row.names = 1)
dat

## with base graphics
barplot(as.matrix(dat), col = 2:5)
legend("topright", fill = 2:5, legend = rownames(dat))


## with ggplot
library(ggplot2)
library(reshape2)

# transform your data
dat2 <- dat
dat2$base <- rownames(dat)
dat2 <- melt(dat2)

# plot
ggplot(dat2, aes(fill = base, y = value, x = variable)) + geom_bar(stat = "identity")

輸出以下圖:

在此處輸入圖片說明 在此處輸入圖片說明

這樣的事情能解決你的問題嗎?

library(tidyverse)

df <- tibble(
   gene = c("A", "T", "G", "C"), 
   V1 = c(12, 13, 19, 12), 
   V2 = c(10, 14, 08, 13), 
   V3 = c(10, 13, 13, 17), 
   V4 = c(10, 10, 10, 10)
)
df
#> # A tibble: 4 x 5
#>   gene     V1    V2    V3    V4
#>   <chr> <dbl> <dbl> <dbl> <dbl>
#> 1 A        12    10    10    10
#> 2 T        13    14    13    10
#> 3 G        19     8    13    10
#> 4 C        12    13    17    10

df_long <- df %>% 
  pivot_longer(-gene)
df_long
#> # A tibble: 16 x 3
#>    gene  name  value
#>    <chr> <chr> <dbl>
#>  1 A     V1       12
#>  2 A     V2       10
#>  3 A     V3       10
#>  4 A     V4       10
#>  5 T     V1       13
#>  6 T     V2       14
#>  7 T     V3       13
#>  8 T     V4       10
#>  9 G     V1       19
#> 10 G     V2        8
#> 11 G     V3       13
#> 12 G     V4       10
#> 13 C     V1       12
#> 14 C     V2       13
#> 15 C     V3       17
#> 16 C     V4       10

ggplot(df_long, aes(x = name, y = value, fill = gene)) +
  geom_col()

reprex 包(v0.3.0) 於 2020 年 3 月 20 日創建

暫無
暫無

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

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