FILE.CSV
group metric
"1" 1.1
"0" 2.2
"0" 3.3
"1" 4.4
我正在阅读以下file.csv
以下的数据框
df <- read.csv("file.csv", header=T)
# store col names for using later
group_name <- colnames(df)[1]
metric_name <- colnames(df)[2]
在创建箱形图时,我需要将颜色传递给变量group_name
p <- ggplot(data=df, aes(x=df[,group_name], y=df[,metric_name], color=group_name ) ) +
geom_boxplot(outlier.colour="darkred", outlier.shape = NA, fill = fill, color=line, alpha = 0.5) +
theme(legend.position = c(1, 1), legend.justification = c(1, 1))
p
问题是图中的图例显示为group_name
而不是变量group_name
的值 - 需要做什么才能使颜色获取变量{{1}的值}?
在group_name
中使用x=df[,group_name]
的原因是为了使其通常适用于任何csv文件,可能不知道整个列名称。
答案 0 :(得分:0)
这就是ggplot
范例的工作原理。通常,分组变量是描述属性而不是数字的因子或字符向量。我们来一些类似于.csv的随机数据:
group <- c(1,0,1,1,0,0,0,1,0,1)
metric <- rnorm(10, 1)
df <- data.frame(group, metric)
在您的情况下,您可以使用dplyr::mutate
按照评论中的建议添加新列。您可以随意调用新列和变量。
library(dplyr)
df.gp <- df %>% mutate(Group.new = paste("Group", group))
# df.gp
# group metric Group.new
# 1 1 1.3100608 Group 1
# 2 0 2.7120827 Group 0
# 3 1 -0.2310713 Group 1
# etc
现在绘制数据:
library(ggplot2)
ggplot(df.gp, aes(x=Group.new, y=metric, fill=Group.new)) + geom_boxplot() +
theme(legend.position = c(1, 1), legend.justification = c(1, 1))
答案 1 :(得分:0)
从评论中可以看出,user3206440的目的是将列名传递给函数。正如我在评论中提到的那样,ggplot的方法如下:
customBoxPlot <- function(df, group_var, metric_var) {
ggplot(df, aes_string(x=group_var, y=metric_var, color=group_var)) +
geom_boxplot(outlier.colour="darkred", outlier.shape = NA, alpha = 0.5) +
theme(legend.position = c(1, 1), legend.justification = c(1, 1))
}
customBoxPlot(df, names(df)[1], names(df)[2])
# or
customBoxPlot(df, "group", "metric")
这是使用您的数据输出的外观: