簡體   English   中英

在 R-ggplot2 中繪制頻率表的直方圖

[英]Plot a histogram for a frequency table in R- ggplot2

我有一個每個參考值(基本上是 bin 大小)的變量出現次數的頻率表。 例如(見下面的數據):第 1 列第 1 行是參考值(0-5),第 2 列第 3 列和第 4 列分別表示觀察到狀態 1、狀態 2 和狀態 3 的次數。 我想為不同的參考值繪制每種狀態類型出現次數的直方圖。 例如,對於 x 軸上的參考值 5,我想查看狀態 1、狀態 2 和狀態 3 的出現。類似地,對於參考值 10,我想查看狀態 1、狀態 2 和狀態 3. 我很難弄清楚我應該如何設置我的數據框來最好地回答這個問題。 任何幫助表示贊賞。

df_1 <- structure(list(ref = c(5L, 10L, 15L, 20L, 25L, 30L, 35L, 40L, 
45L, 50L, 55L, 60L, 65L, 70L, 75L, 80L, 85L, 90L, 95L, 100L, 
105L, 110L, 115L, 120L, 125L, 130L, 135L, 140L, 145L, 150L, 155L, 
160L, 165L, 170L, 175L, 180L, 185L, 190L, 195L, 200L), status1 = c(8341L, 
3045L, 788L, 39L, 8L, 8L, 6L, 12L, 21L, 18L, 12L, 15L, 9L, 4L, 
4L, 2L, 2L, 8L, 0L, 6L, 6L, 3L, 3L, 2L, 4L, 1L, 1L, 4L, 4L, 6L, 
1L, 1L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L), status2 = c(0L, 537L, 
1345L, 1252L, 536L, 314L, 244L, 39L, 7L, 8L, 8L, 3L, 0L, 0L, 
3L, 2L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 
0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L), status3 = c(0L, 0L, 
0L, 88L, 484L, 489L, 449L, 655L, 545L, 497L, 353L, 376L, 282L, 
261L, 332L, 241L, 182L, 140L, 166L, 148L, 143L, 109L, 89L, 74L, 
39L, 85L, 60L, 39L, 26L, 31L, 20L, 10L, 2L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L)), row.names = c(NA, -40L), class = "data.frame")

首先使用pivot_longer使您的數據從寬變長。 之后,您可以像這樣創建一個堆疊的條形圖:

library(ggplot2)
library(dplyr)
library(tidyr)
df_1 %>%
  pivot_longer(-ref) %>%
  ggplot(aes(x = ref, y =value, fill = name)) +
  geom_bar(stat = "identity", position = "stack")

輸出:

在此處輸入圖像描述

我不確定這是否適合您的要求,但分組應該可以解決您的問題:

hist <- df_1 |> 
  plot_ly() |> 
  group_by(ref) |> 
  add_histogram(~status1) |> 
  layout(xaxis = list(title = "Status 1"))

hist

讓我知道這是否真的有幫助。

暫無
暫無

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

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