提问人:EliCash 提问时间:9/29/2022 最后编辑:EliCash 更新时间:9/30/2022 访问量:405
使用 R 和 ggplot2 有没有更好的方法来可视化 TRUE 和 FALSE 布尔值列?
Using R and ggplot2 is there a better way to visualize TRUE and FALSE Boolean Value columns?
问:
所以我有一个更大的数据集,但为了简单起见,我尽了最大努力提供我的问题/数据集的简化版本:
所以总共有3只小猪。其中一头猪只拥有一栋房子,我想在 Y 轴上绘制房屋总价值,然后是每头猪拥有多少的分面视图。
房子 | 房屋价值 | 猪1 | 猪2 | 猪3 |
---|---|---|---|---|
干草 | 30000 | 真 | 假 | 假 |
棒 | 70000 | 真 | 真 | 假 |
砖 | 100000 | 真 | 真 | 真 |
我对我的 R 用法以及我的 GGPLOT2 用法非常生疏。我正在用这些数据做各种疯狂的事情,例如:
library(ggplot2)
library(readr)
piggies <- read_csv("piggies.csv")
ggplot(piggies, aes(x=PIG1, fill=as.factor(HOUSEVALUE)))+geom_bar(position='dodge')
ggplot(piggies, aes(x=PIG2, fill=as.factor(HOUSEVALUE)))+geom_bar(position='dodge')
我知道上面的 ggplot2 可视化效果近乎疯狂,但我最难追踪布尔值列的可靠资源并使 Y 轴表示“计数”以外的其他内容
(编辑了示例GGPlot公式,使其比我的原始示例略少疯狂)
答:
1赞
Silentdevildoll
9/30/2022
#1
我不确定这是否是你要找的,它会给出每头猪拥有的每种类型的堆叠总量。与@Akrun所说的类似,它在绘图之前使用pivot_longer:
dat<-data.frame("HOUSES" = c("Hay", "Sticks", "Bricks"), "HOUSEVALUE" = c(30000, 70000, 100000), "PIG1" = c(T,T,T), "PIG2" = c(F,T,T), "PIG3" = c(F,F,T))
library(dplyr)
library(tidyr)
library(ggplot2)
dat%>%
pivot_longer(cols = starts_with("PIG"))%>%
filter(value)%>%
ggplot()+
aes(name, HOUSEVALUE, fill = HOUSES)+
geom_bar(stat = "identity")
评论
0赞
EliCash
9/30/2022
这对我有用,我真的很感激。但是,有没有办法这样做: - 这给了我一个错误,但是我计划使用这种方法的一些更大的数据与名称都不同。pivot_longer(cols = PIG1, PIG2)%>%
1赞
Silentdevildoll
9/30/2022
我需要多个名称的方法是使用 ,所以用这一行替换 ,您可以在其中用 |grep
pivot_longer
pivot_longer(cols = grep("PIG1|PIG2|PIG3", names(.)))
0赞
EliCash
9/30/2022
虽然这对我的初始视觉效果非常有效,但有没有办法在不使用 pivot_longer 方法的情况下做到这一点?即使需要更改数据的布局方式?
0赞
Silentdevildoll
10/1/2022
如果您正在寻找 的替代方案,那么还有其他选择(这些是 ,但我认为它证明了我的观点):stackoverflow.com/questions/67778341/...pivot_longer
pivot_wider
0赞
Silentdevildoll
10/1/2022
如果你试图避免重塑数据,那么我不太确定你该怎么做。我能想到的最好的是.但这不是自动化的,所以你必须弄清楚如何输入这些 0。dat%>% ggplot()+ geom_bar(aes(x = "PIG1", y = HOUSEVALUE[PIG1], fill = HOUSES), stat = "identity")+ geom_bar(aes(x = "PIG2", y = c(0,HOUSEVALUE[PIG2]), fill = HOUSES), stat = "identity")+ geom_bar(aes(x = "PIG3", y = c(0,0,HOUSEVALUE[PIG3]), fill = HOUSES), stat = "identity")
评论
df1 %>% pivot_longer(cols = starts_with('PIG')) %>% filter(value) %>% ggplot(aes(x = name, y = HOUSEVALUE, fill = HOUSES)) + geom_col() + facet_wrap(~ HOUSES)
df1 %>% pivot_longer(cols = starts_with('PIG')) %>% mutate(value = factor(value)) %>% ggplot(aes(x = name, y = HOUSEVALUE, fill = value)) + geom_col() + facet_wrap(~ HOUSES)
geom_histogram
geom_bar
Error in df1 %>% pivot_longer(cols = starts_with("PIG")) %>% filter(value) %>% : could not find function "%>%"