如何在 R 中创建包含条件 if 语句的垂直条形图?

How do you create a vertical bar plot that contains a conditional if statement in R?

我有一个数据集可以测量受访者在看到不同刺激时的情绪。这是一个例子:

Sample   Attribute   Score   Rank
A        Delighted   180     High
A        Happy       200     High
A        Tired       130     Medium
B        Delighted   160     Medium
B        Happy       128     Low
B        Tired       115     Low

我是 R 的新手,我在制作只显示示例 A 的条形图时遇到了问题。这是我尝试做的事情:

ggplot(data =
         filter(DATA, Category == "A"), 
       mapping = aes(x = Score, y = Attribute)) +
  geom_

但是 R 给我这个错误:

Error: `data` must be a data frame, or other object coercible by `fortify()`, not an S3 object with class mts/ts.

理想情况下,我试图获得一个条形图,其属性列在垂直轴上,分数列在 x 轴上,并且只显示样本 A,条形颜色按等级编码。任何帮助都会很棒!

欢迎来到 SO。从 ggplot2 reference site 开始并完成其中的示例将帮助您熟悉如何处理数据并将其绘制在 ggplot2 中。也就是说,这里有一些帮助您入门的建议。

首先,如错误所示,您需要一个数据框,而不是您当前存储数据的任何格式。根据您给我的内容,我就是这样得到了 data.frame,但您可能会使用其他东西。

t <- "Sample   Attribute   Score   Rank
A        Delighted   180     High
A        Happy       200     High
A        Tired       130     Medium
B        Delighted   160     Medium
B        Happy       128     Low
B        Tired       115     Low"

df <- read.table(text=t, header=T)

## this might be more relevant for your current situation
df <- as.data.frame(DATA)

尽量不要使用“data”作为对象名,因为它已经是一个命名函数。

其次,如果您正在学习 R,明智的做法可能是将分析中的步骤分开,以确保您了解每个部分的作用。所以接下来做子集只得到样本 A.

library(tidyverse)

df.sub <- df %>%
  filter(Sample=="A")

现在绘图会更容易。您的绘图代码看起来像是在正确的轨道上,但您没有完成这条线。

library(ggplot2)

ggplot(df.sub, aes(x=Score, y=Attribute, fill=Rank)) +
  geom_bar(stat="identity")

您需要指定 stat="identity" 来告诉 ggplot 您希望它识别您作为数据提供的值,而不是生成计数(对于直方图)。

这应该可以满足您的需求。