可视化聚合调查数据(不整洁)的最佳方法是什么?
What's the best approach for visualizing aggregated survey data (not tidy)?
我正在使用的当前数据框的结构使得列名形成李克特量表响应标题,行名是与所问问题相关的人口统计数据。汇总人口统计的李克特回答。我正在寻找可视化这些数据(有很多图表,每个图表都显示人口统计的李克特数据)。
示例数据:
Demographic Strongly_Disagree Disagree Neutral Agree Strongly_Agree
Male 255 327 455 222 456
Female 331 387 225 548 346
Age 18-25 111 189 547 865 456
Age 25-39 564 324 443 786 904
Age 40-55 407 372 436 784 432
这不是真实数据(因为它有些私密),但这是一种格式,其中针对每个问题汇总了每个人口统计群体的答复数量。
我想做的是在 ggplot 中可视化这些数据,我在其中构建了 5 个单独的条形图(男性、女性和 3 个年龄组),每个图表包含 5 个条形图,对应于李克特量表响应。条形高度将对应于响应的总数量。
例如,我希望第一个图表显示对于男性,255 位受访者回答“非常不同意”,327 人回答“不同意”,455 人回答“中立”,22 人回答“同意”,456 人回答“非常不同意” “非常同意。”
有没有一种不用显着重构数据就可以做到这一点的好方法?
伪代码:
ggplot(data = df, aes(x = df(, 2:5), y = df[2:5,])) +
geom_bar(...)
任何正确方向的建议或指示将不胜感激。谢谢!
您似乎需要 melt
表单 data.table
(或 reshape2
)
library(dplyr)
library(data.table)
df <- read.table(text = "Demographic 'Strongly_Disagree' Disagree Neutral Agree 'Strongly Agree'
Male 255 327 455 222 456
Female 331 387 225 548 346
'Age 18-25' 111 189 547 865 456
'Age 25-39' 564 324 443 786 904
'Age 40-55' 407 372 436 784 432", header =T)
df <- df %>%
as.data.table() %>% ##conv to data.table
melt(variable.name = "var", value.name = "val", id.var = 'Demographic')
library(ggplot2)
ggplot(data = df[Demographic == "Male"], aes(x = var, y = val)) + geom_point()
假设您的数据框名称是 data
library(ggplot2)
library(dplyr)
library(data.table)
data<- data%>% melt(variable.name = "var", value.name = "val", id.var = 'Demographic')
ggplot(df, aes(x = var, y =val,fill=var))+
geom_bar(stat = 'identity')+
facet_grid(. ~Demographic)
输出:
这是你想要的吗?
我正在使用的当前数据框的结构使得列名形成李克特量表响应标题,行名是与所问问题相关的人口统计数据。汇总人口统计的李克特回答。我正在寻找可视化这些数据(有很多图表,每个图表都显示人口统计的李克特数据)。
示例数据:
Demographic Strongly_Disagree Disagree Neutral Agree Strongly_Agree
Male 255 327 455 222 456
Female 331 387 225 548 346
Age 18-25 111 189 547 865 456
Age 25-39 564 324 443 786 904
Age 40-55 407 372 436 784 432
这不是真实数据(因为它有些私密),但这是一种格式,其中针对每个问题汇总了每个人口统计群体的答复数量。
我想做的是在 ggplot 中可视化这些数据,我在其中构建了 5 个单独的条形图(男性、女性和 3 个年龄组),每个图表包含 5 个条形图,对应于李克特量表响应。条形高度将对应于响应的总数量。
例如,我希望第一个图表显示对于男性,255 位受访者回答“非常不同意”,327 人回答“不同意”,455 人回答“中立”,22 人回答“同意”,456 人回答“非常不同意” “非常同意。”
有没有一种不用显着重构数据就可以做到这一点的好方法?
伪代码:
ggplot(data = df, aes(x = df(, 2:5), y = df[2:5,])) +
geom_bar(...)
任何正确方向的建议或指示将不胜感激。谢谢!
您似乎需要 melt
表单 data.table
(或 reshape2
)
library(dplyr)
library(data.table)
df <- read.table(text = "Demographic 'Strongly_Disagree' Disagree Neutral Agree 'Strongly Agree'
Male 255 327 455 222 456
Female 331 387 225 548 346
'Age 18-25' 111 189 547 865 456
'Age 25-39' 564 324 443 786 904
'Age 40-55' 407 372 436 784 432", header =T)
df <- df %>%
as.data.table() %>% ##conv to data.table
melt(variable.name = "var", value.name = "val", id.var = 'Demographic')
library(ggplot2)
ggplot(data = df[Demographic == "Male"], aes(x = var, y = val)) + geom_point()
假设您的数据框名称是 data
library(ggplot2)
library(dplyr)
library(data.table)
data<- data%>% melt(variable.name = "var", value.name = "val", id.var = 'Demographic')
ggplot(df, aes(x = var, y =val,fill=var))+
geom_bar(stat = 'identity')+
facet_grid(. ~Demographic)
输出:
这是你想要的吗?