如何在 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
您希望它识别您作为数据提供的值,而不是生成计数(对于直方图)。
这应该可以满足您的需求。
我有一个数据集可以测量受访者在看到不同刺激时的情绪。这是一个例子:
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
您希望它识别您作为数据提供的值,而不是生成计数(对于直方图)。
这应该可以满足您的需求。