2

我有一个df包含三列的数据框:TASKCONDITIONSCORE。我想表示数据:

  1. 作为条形图(我正在使用geom_col
  2. 每个都有一个单独的情节TASK(我正在使用 facet_wrap(~TASK)
  3. 每个都有一个单独的栏CONDITION(我正在使用ggplot(df, aes(x=CONDITION))

此外,预期的行为是,如果给定条形的数据总和达到给定百分比,则该条应该与达到相同百分比的其他条具有相同的颜色。不幸的是,我无法让它发挥作用。

在下面的最小示例中,3 个柱达到 100%,因此我希望它们按照说明都是蓝色的,high="blue"但这不是正在发生的事情。

Input =("
TASK CONDITION SCORE
GAU   0         0.25
GAU   0         0.25
GAU   0         0.25
GAU   0         0.25
GAU   1         0.2
GAU   1         0.2
GAU   1         0.2
GAU   1         0.2
GAU   1         0.2
PLN   0         0.3333
PLN   0         0.3333
PLN   0         0
PLN   1         0.5
PLN   1         0.5
        ")
df <- read.table(textConnection(Input),
                 header=TRUE)
df$CONDITION <- factor(df$CONDITION)

library(ggplot2)
ggplot(df, aes(x=CONDITION, y=SCORE, fill=SCORE)) +
  geom_col() +
  ggtitle("Performance") +
  ylab("Total") +
  scale_y_continuous(labels = scales::percent) +
  facet_wrap(~TASK) +
  scale_fill_gradient(low="red", high="blue")
4

1 回答 1

1

真正发生的事情有点被情节隐藏了。如果我们在条上加一个边框并更改第一个值,也许它会更清楚

df2 <- df
df2[1, "SCORE"] <- .5
ggplot(df2, aes(x=CONDITION, y=SCORE, fill=SCORE)) +
  geom_col(color="black") +
  ggtitle("Performance") +
  ylab("Total") +
  scale_y_continuous(labels = scales::percent) +
  facet_wrap(~TASK) +
  scale_fill_gradient(low="red", high="blue")

在此处输入图像描述

它不是按图的总高度着色,而是按每次观察着色。请注意您的色阶如何仅上升到 0.5。如果您只想为此使用 ggplot,您可以使用 geom_bar 的汇总统计信息为您进行汇总。它看起来像这样

ggplot(df, aes(x=CONDITION, y=SCORE, fill=..y..)) +
  geom_bar(stat="summary", fun.y="sum") +
  ggtitle("Performance") +
  ylab("Total") +
  scale_y_continuous(labels = scales::percent) +
  facet_wrap(~TASK) +
  scale_fill_gradient(low="red", high="blue")

在此处输入图像描述

于 2018-06-20T21:44:34.500 回答