首页 > 解决方案 > 在 ggplot2 中创建条形图并根据来自另一个数据框的标签添加点

问题描述

df1 <- data.frame(var=c("foo","bar","baz"), value=c(10,20,30))
df2 <- data.frame(var1=c("foo","foo","bar","baz"),var2=c("bar","baz","foo","foo"), value=c(23,18,26,33), color=c("blue","green","red","yellow"))

p <- ggplot(aes(x=var, y=value), data=df1) + geom_bar(stat="identity")

现在我想p根据中的标签df2$var1df2$var2中指定的颜色为每个条添加一个点df2$color。例如,blue在条形上方显示一个点,foobar值为23。条上的green点,值为,依此类推。foobaz18

我不确定如何在 ggplot2 中实现它...

标签: rggplot2

解决方案


您可以geom_point使用colour. aes使用您的示例,您可以执行以下操作:

library(ggplot2)
ggplot(aes(x=var, y=value), data=df1) + geom_bar(stat="identity") +
  geom_point(data = df2, aes(x = var1, y= value), colour = df2$color)+
  geom_point(data = df2, aes(x = var2, y= value), colour = df2$color) 

编辑:使用 scale_color_identity

上面的解决方案将适用于您的简单情况。但是,例如,如果您需要进行刻面,最好使用 scale_color_identity@MrFlick 提出的选项。

library(ggplot2)
ggplot(aes(x=var, y=value), data=df1) + geom_bar(stat="identity") +
  geom_point(data = df2, aes(x = var1, y= value, color = color))+
  geom_point(data = df2, aes(x = var2, y= value, color = color))+
  scale_color_identity() 

在此处输入图像描述


推荐阅读