首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从dataframe中使用ggplot为每一列制作一个方框图

如何从dataframe中使用ggplot为每一列制作一个方框图
EN

Stack Overflow用户
提问于 2016-06-22 14:09:09
回答 1查看 3.5K关注 0票数 2

我发现boxplot()生成的情节如下:

  • 上晶须=min(最大(X),Q_3 + 1.5 * IQR)
  • 低晶须=最大值(最小(X),Q_1 - 1.5 * IQR)
  • 上边=1四分位数
  • 中=平均
  • 底部=3四分位数

我有一个数据中心,它的头部是这样的:

代码语言:javascript
运行
复制
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35

X1H 8 2 0 0 0 2 2 2 6  2  4  2  4  2  4  8  2  6  0 10  0  6  4  0  6  2  8  2  2  8  6  2  2  2  8

X2H 2 0 2 2 2 4 0 4 0  0  2  2  2  2  0  6  2  2  2  0  0  0  2  0  2  4  2  2  2  2  2  2  4  2  0

X3H 0 2 0 0 2 2 0 0 0  4  2  2  2  2  2  0  2  2  0  0  2  0  0  2  2  2  0  6  2  0  2  0  6  0  2

X4H 0 0 0 2 0 2 0 0 2  0  2  0  2  0  0  2  0  6  0  2  2  2  2  0  0  2  4  2  2  2  0  2  4  2  6

X5H 2 0 0 0 2 0 0 2 0  0  2  0  0  2  2  2  0  2  0  2  0  2  0  6  0  2  4  4  0  2  2  0  2  0  4

X6H 2 0 2 0 2 2 0 2 2  0  2  2  2  0  0  2  2  2  0  0  2  0  2  0  0  2  2  2  2  0  2  0  2  2  4

我想要一个方格图,每一栏都显示:

  • 上晶须
  • 低晶须=最大值
  • 上边=平均+标准差
  • 中=平均
  • 底部=平均标准差

所以我找到了这个,它很有魅力:

代码语言:javascript
运行
复制
min.mean.sd.max <- function(x) {
  r <- c(min(x), mean(x) - sd(x), mean(x), mean(x) + sd(x), max(x))
  names(r) <- c("ymin", "lower", "middle", "upper", "ymax")
  r
}

p1 <- ggplot(aes(y = value, x = factor(group)), data = mydata)

p1 <- p1 + stat_summary(fun.data = min.mean.sd.max, geom = "boxplot")

但在第二种情况下,dataframe如下所示:

代码语言:javascript
运行
复制
       value group
1 0.56025153     1
2 0.88368829     1
3 0.06555686     1
4 0.44767630     1
5 0.90424061     2
6 0.96331650     2

因此,我不知道在我的例子中,aes()中应该放入什么内容。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-22 15:31:33

我在下面创建了一个dataframe。

代码语言:javascript
运行
复制
> data
  X X1 X2 X3 X4
X1H  8  2  0  0
X2H  2  0  2  2
X3H  0  2  0  0
X4H  0  0  0  2
X5H  2  0  0  2
X6H  2  0  2  0

然后,利用熔融函数对其进行整形。

代码语言:javascript
运行
复制
data.melt<-melt(data, id="X")

假设您想用自己的计算绘制一个盒子图,我计算了每一列的平均值,sd,min,max。

代码语言:javascript
运行
复制
data.sum<-ddply(data.melt, .(variable), summarise,
         mean = mean(value),
         sd = sd(value),
         min = min(value),
         max = max(value))

然后,您可以用下面的代码为每一列创建一个框图。

代码语言:javascript
运行
复制
ggplot(data.sum, aes(x=variable))+geom_boxplot(aes(ymin =min, lower = mean-sd, middle = mean, upper = mean+sd, ymax =max), stat="identity")

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37970543

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档