需要使用来自data.frame的两列数据制作条形图

时间:2019-05-08 01:02:53

标签: r

我正在尝试使data.frame彼此并排放置两列的条形图。我尝试过:

barplot(data.frame$data1, data.frame$data2, data=data.frame)

here is data:   
   Neutral Emotional
1   0.790   1.6400
2   0.051   0.0880
3   0.891   2.7200
4   0.430   1.1800
5   -0.009  -0.6000

但是它产生大量的条形,而不仅仅是两个。我正在尝试创建两个条形,一个是中性色,一个代表SEM的情感和错误条形。

2 个答案:

答案 0 :(得分:1)

一种选择是将gather转换为'long'格式,然后使用geom_bar中的ggplot2

library(tidyverse)
library(ggplot2)
gather(df1) %>% 
    ggplot(., aes(x = key, y = value)) +
        geom_bar(stat = 'identity')

如果我们还需要一个错误栏,那么

gather(df1) %>% 
     ggplot(., aes(x = key, y = value)) +
         stat_summary(fun.y = mean, geom = "bar") + 
         stat_summary(fun.data = mean_se, geom = "errorbar")

enter image description here

数据

df1 <- structure(list(Neutral = c(0.79, 0.051, 0.891, 0.43), Emotional = c(1.64, 
0.088, 2.72, 1.18)), class = "data.frame", row.names = c("1", 
"2", "3", "4"))

答案 1 :(得分:1)

讨论实现此结果的方法in this guide。请注意,他们推荐ggplot2胜过barplot

要获得带有平均值平均值标准误差的误差线的图表:

library(tidyverse)

data.frame %>% 
  gather(Var, Val) %>% 
  group_by(Var) %>% 
  summarise(Mean = mean(Val), 
            SD = sd(Val), 
            SE = SD/sqrt(n())) %>% 
  ggplot(aes(Var, Mean)) + 
  geom_col() + 
  geom_errorbar(aes(ymin = Mean - SE, 
                    ymax = Mean + SE),
                width = 0.5)

结果:

enter image description here

但是:请注意,数据可视化专家并未充分理解所谓的“炸药图”。对于少量样本,最好使用geom_boxplotgeom_jitter显示范围。

箱线图:

data.frame %>% 
  gather(Var, Val) %>% 
  ggplot(aes(Var, Val)) + 
  geom_boxplot()

enter image description here

均值抖动:

data.frame %>% 
  gather(Var, Val) %>% 
  ggplot(aes(Var, Val)) + 
  geom_jitter(width = 0.2) + 
  stat_summary(geom = "crossbar", 
               fun.y = mean, 
               fun.ymax = mean, 
               fun.ymin = mean, 
               color = "red", 
               width = 0.4)

enter image description here