使用ggplot2创建频率直方图

时间:2020-10-30 01:15:07

标签: r

您好,我是R的新手。我正在努力完成似乎比较简单的任务-我正尝试使用ggplot2从更长数据帧的数据子集中制作频率直方图。 这是所附图片中的数据结构示例 https://i.stack.imgur.com/HIwQv.png

数据来自调查,其中0表示未选中,1表示已选中。原始数据集中有数字,我想要选择每个变量的频率的直方图。 x轴上的列变量,y轴上的频率计数。我在数据框内有各种这样的子集,我希望每个子集都可以子集化自己的图形。

我首先将感兴趣的列作为子集 新数据集<-subset(df,select = c(WAB_R,WAB_B,BDAE,PNT)) 当我检查该类时,它是数据框,不再是数字

我尝试使用as.numeric将其转换回数字,但是没有运气 我可以使用一些指导来指导如何构建数据,然后获得直方图。

感谢卡拉

1 个答案:

答案 0 :(得分:0)

也许可以使用tidyverse函数来尝试这种方法。您必须重塑形状以长期选择所需的变量。下面的代码使用ggplot2进行最终绘图:

library(tidyverse)
#Code 1
df %>% select(c(WAB_R, WAB_B, BDAE, PNT)) %>%
  pivot_longer(everything()) %>%
  ggplot(aes(x=value))+
  geom_histogram(stat = 'count',aes(fill=name),
                 position = position_dodge2(0.9,preserve = 'single'))+
  labs(fill='Variable')

输出:

enter image description here

或者这个:

#Code 2
df %>% select(c(WAB_R, WAB_B, BDAE, PNT)) %>%
  pivot_longer(everything()) %>%
  ggplot(aes(x=factor(value)))+
  geom_histogram(stat = 'count',aes(fill=name),
                 position = position_dodge2(0.9,preserve = 'single'))+
  labs(fill='Variable')+xlab('value')

输出:

enter image description here

使用了一些数据:

#Data
df <- structure(list(ID = 1:4, WAB_R = c(0L, 1L, 0L, 1L), WAB_B = c(0L, 
1L, 0L, 0L), BDAE = c(0L, 0L, 0L, 1L), PNT = c(0L, 0L, 0L, 0L
)), class = "data.frame", row.names = c(NA, -4L))
相关问题