【问题标题】:ggplot plot boxplot by label per column?ggplot 按每列标签绘制箱线图?
【发布时间】:2018-06-05 21:45:18
【问题描述】:

我有以下数据框:

x1 x2  x3    y1 y2  y3 z1 z2   z3    label
1  54  -9    45 323 1  9  12  -0.1   1
5  21  -33.3 54 0.9 98 12 -87  5     2
12 1.3  0    23  12 65  7 -8   15    1  

我想绘制一个分面图,按标签比较每一列。

例如 x1 值:2 个箱线图,其中标签 == 1 和标签 == 2。 9 个方面,每个方面都有每个标签的 2 个箱形图。

我正在尝试这样做:

test <- gather(df, key, value, -label)

ggplot(test, aes(x = factor(label), y = value)) +
  geom_boxplot() +
  facet_wrap(~ key)

请指教如何做到这一点?

【问题讨论】:

  • 我不明白您的问题,IMO 您的代码(自编辑后)会产生您所描述的输出。
  • @jaySf 我只是觉得我错过了一些东西,也许有这样的任务的命令。每天从专家那里学习新知识。

标签: r ggplot2


【解决方案1】:

您必须拥有长格式的数据框。使用包reshape2 你可以这样做。

m <- reshape2::melt(df, id.vars = "label")

ggplot(m, aes(x = label, y = variable)) +
  geom_boxplot() +
  facet_wrap( ~ variable)

就像 OP 在评论中所说,使用包 tidyr 这将按如下方式完成。

test <- tidyr::gather(df, key, value, -label)

ggplot(test, aes(x = label, y = key)) +
  geom_boxplot() +
  facet_wrap( ~ key)

数据。

df <- read.table(text = "
x1 x2  x3    y1 y2  y3 z1 z2   z3    label
1  54  -9    45 323 1  9  12  -0.1   1
5  21  -33.3 54 0.9 98 12 -87  5     2
12 1.3  0    23  12 65  7 -8   15    1  
", header = TRUE)

【讨论】:

  • 与 tidyr::gather 相同?
  • “match.names(clabs, names(xi)) 中的错误:名称与以前的名称不匹配”
  • @steves 根据您发布的数据,我没有收到错误,一切正常。
  • @RuiBarradas 您的代码没有产生 OP 的预期输出,每个标签只有一个箱线图。
  • @jaySf 显然是这样,OP 已经接受了答案......而且我真的不知道是否只有一个箱线图或两个相互接触。我只能看到更多数据。
猜你喜欢
  • 1970-01-01
  • 2021-09-07
  • 2018-06-17
  • 1970-01-01
  • 1970-01-01
  • 2015-10-14
  • 1970-01-01
  • 2021-09-30
  • 1970-01-01
相关资源
最近更新 更多