matplotlib 如何使用Python(或R)在条形图中绘制分组条形中的堆叠条形以及进一步分组的条形

u4dcyp6a  于 2022-11-15  发布在  Python
关注(0)|答案(1)|浏览(182)

我有以下Pandasdf我想绘图:

Segment length     Parameter  Parameter value  Train score  Test score
0               16  n_estimators              5.0     0.975414    0.807823
1               16  n_estimators             10.0     0.982342    0.756803
2               16  n_estimators             15.0     1.000000    0.801020
3               16     max_depth              2.0     0.580884    0.284014
4               16     max_depth              6.0     1.000000    0.824830
5               16     max_depth             10.0     1.000000    0.824830
6               16  max_features              0.1     1.000000    0.845238
7               16  max_features              0.3     1.000000    0.845238
8               16  max_features              0.5     1.000000    0.845238
9               32  n_estimators              5.0     0.961905    0.714286
10              32  n_estimators             10.0     0.988095    0.857143
11              32  n_estimators             15.0     1.000000    0.857143
12              32     max_depth              2.0     0.785714    0.571429
13              32     max_depth              6.0     1.000000    0.857143
14              32     max_depth             10.0     1.000000    0.857143
15              32  max_features              0.1     1.000000    0.904762
16              32  max_features              0.3     1.000000    0.904762
17              32  max_features              0.5     1.000000    0.857143

我想象的图是一个分组条形图,包含按“段长度”分组、按“参数"进一步分组、按”值“进一步分组、包含”火车得分“和”测试得分“两个条形(并排或堆叠)......现在这是一把,但是它在纸上是有效的。我已经尝试在Matplotlib(或R)中使用它一整天了,但是没有成功。有人对如何使用它有什么建议吗?
(NB在上面的 Dataframe 中,我有两个“段长度”组,每个参数只有三个“参数值”组;最终将分别为6组和10组左右。)

n6lpvg4x

n6lpvg4x1#

下面是使用R的建议:我们可以切换分组动态:例如填充和刻面。
我们在这里做什么:
1.以长格式显示乐谱
1.分组并计算平均值和sd
1.使用ggplot绘图

library(tidyverse) 
library(ggsci)
df %>% 
  pivot_longer(ends_with("score")) %>% 
  group_by(name, Segment_length, Parameter) %>% 
  summarise(mean_value = mean(value), sd_value = sd(value)) %>% 
  ggplot(aes(x= name, y = mean_value, fill=factor(Segment_length)))+
  geom_bar(stat="identity",position="dodge")+
  facet_wrap(. ~ Parameter)+
  geom_errorbar(mapping=aes(ymin=mean_value-sd_value,ymax=mean_value+sd_value),
                width=0.2,position=position_dodge(width=0.9))+
  theme_classic()+
  scale_fill_nejm() +
  labs(x="Test/Train", y="Score", fill="Segment Length")

相关问题