R - ggplot按变量传递颜色

时间:2016-10-30 05:18:38

标签: r ggplot2

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文件,可能不知道整个列名称。

2 个答案:

答案 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))

enter image description here

答案 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")

这是使用您的数据输出的外观:

output