问题描述
我正试图为同一定量变量的多个类内系数建立分组的条形图,在不同因素(“构造函数”,“政变” ...“音高”)标准化前后进行估算。 这是我的数据集的前5行:
_buildStoresList(AsyncSnapshot<QuerySnapshot> snapshot) {
return snapshot.data.documents
.map((doc) => ListTile(
title: Center(child: Text(doc['store_name'])),//store_name is one of the fields inside my documents inside the collection on which I took the snapshots.
subtitle: Center(child: Text(doc['about'])) //about is another such field.
))
.toList();
}
这里有一些转换,以便barplot函数可以使用方便的矩阵
ICC_intra_observ_3D <- read.csv2("~/Documents/ICC_intra_observ_3D_av_ap_H.csv")
ICC_intra_observ_3D[c(1:5),]
Texture_Feature ICC_intra_observ_3D_av_H ICC_ap_H_constructeur ICC_ap_H_coup ICC_ap_H_detect ICC_ap_H_filter ICC_ap_H_kv ICC_ap_H_mAs ICC_ap_H_pitch
1 CONVENTIONAL_HUmin 11.18 22.26 11.3 13.86 22.94 11.74 18.84 14.26
2 CONVENTIONAL_HUmean 91.16 91.06 91.05 92.09 89.33 90.79 88.2 92.26
3 CONVENTIONAL_HUstd 60.16 62.09 60.34 62.26 63.64 60.22 61.94 59.96
4 CONVENTIONAL_HUmax 76.36 77.09 76.41 80.12 74.75 75.74 73.37 77.21
5 CONVENTIONAL_HUQ1 88.81 88.86 88.7 90.04 87.29 88.46 86.17 90.62
之后的结果是:
rownames(ICC_intra_observ_3D)=ICC_intra_observ_3D$Texture_Feature
ICC_intra_observ_3D=ICC_intra_observ_3D[,-1]
ICC_intra_observ_3D=t(ICC_intra_observ_3D)
但是在运行时:
CONVENTIONAL_HUmin CONVENTIONAL_HUmean CONVENTIONAL_HUstd CONVENTIONAL_HUmax CONVENTIONAL_HUQ1 CONVENTIONAL_HUQ2 CONVENTIONAL_HUQ3
ICC_intra_observ_3D_av_H "11.18" "91.16" "60.16" "76.36" "88.81" "89.91" "91.1"
ICC_ap_H_constructeur "22.26" "91.06" "62.09" "77.09" "88.86" "89.89" "91.04"
ICC_ap_H_coup "11.3" "91.05" "60.34" "76.41" "88.7" "89.84" "91.1"
ICC_ap_H_detect "13.86" "92.09" "62.26" "80.12" "90.04" "90.96" "91.47"
ICC_ap_H_filter "22.94" "89.33" "63.64" "74.75" "87.29" "88.12" "89.07"
ICC_ap_H_kv "11.74" "90.79" "60.22" "75.74" "88.46" "89.62" "90.79"
ICC_ap_H_mAs "18.84" "88.2" "61.94" "73.37" "86.17" "87.03" "87.92"
ICC_ap_H_pitch "14.26" "92.26" "59.96" "77.21" "90.62" "91.26" "91.88"
知道使用默认参数barplot(ICC_intra_observ_3D,beside=T)
时,我有一个堆积的barplot似乎可以正常工作,但是我需要比较不同的ICC,以便将它们放在旁边比较合适。
请注意,我没有尝试使用beside = F
,因为重组输入数据集似乎更加困难,但是欢迎提出任何建议。
感谢您的帮助
解决方法
我建议使用tidyverse
方法。将您的最终数据用作df
,代码如下:
首先数据:
#Data
df <- structure(list(Var = c("ICC_intra_observ_3D_av_H","ICC_ap_H_constructeur","ICC_ap_H_coup","ICC_ap_H_detect","ICC_ap_H_filter","ICC_ap_H_kv","ICC_ap_H_mAs","ICC_ap_H_pitch"),CONVENTIONAL_HUmin = c(11.18,22.26,11.3,13.86,22.94,11.74,18.84,14.26),CONVENTIONAL_HUmean = c(91.16,91.06,91.05,92.09,89.33,90.79,88.2,92.26),CONVENTIONAL_HUstd = c(60.16,62.09,60.34,62.26,63.64,60.22,61.94,59.96),CONVENTIONAL_HUmax = c(76.36,77.09,76.41,80.12,74.75,75.74,73.37,77.21),CONVENTIONAL_HUQ1 = c(88.81,88.86,88.7,90.04,87.29,88.46,86.17,90.62),CONVENTIONAL_HUQ2 = c(89.91,89.89,89.84,90.96,88.12,89.62,87.03,91.26),CONVENTIONAL_HUQ3 = c(91.1,91.04,91.1,91.47,89.07,87.92,91.88)),class = "data.frame",row.names = c(NA,-8L))
现在输入代码。
为了使ggplot2
函数正常工作,最好重塑变量。您可以使用pivot_longer
中的tidyverse
将所有列移至行,然后使用geom_bar()
绘制图:
df %>% pivot_longer(cols = -Var) %>%
ggplot(aes(x=Var,y=value,fill=name))+
geom_bar(stat = 'identity',position = position_dodge2(width = 0.9,preserve = 'single'))
输出:
那是您在x轴上使用的第一个变量,另一种方法是将所有量度移到x轴:
df %>% pivot_longer(cols = -Var) %>%
ggplot(aes(x=name,fill=Var))+
geom_bar(stat = 'identity',preserve = 'single'))
输出:
更新:为了按所需顺序排列Var
,请使用以下代码:
#Order x-axis
df %>% pivot_longer(cols = -Var) %>%
mutate(Var=factor(Var,levels = unique(u1$Var),ordered=T)) %>%
ggplot(aes(x=Var,preserve = 'single'))
输出: