r - 在 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$var1
和df2$var2
中指定的颜色为每个条添加一个点df2$color
。例如,blue
在条形上方显示一个点,foo
其bar
值为23
。条上的green
点,值为,依此类推。foo
baz
18
我不确定如何在 ggplot2 中实现它...
解决方案
您可以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()
推荐阅读
- node.js - 不能使用 jwt.sign,res.headers 不是函数
- django - 无法解析剩余部分:来自 'post.answers_set.all.order_by('-date_posted')' 的 '('-date_posted')'
- mysql - MySQL创建过程出错我不知道为什么
- php - Laravel 7试图获取非对象的属性“id”
- api - 从下拉选择中获取完整信息(Flutter / Dart)
- c++ - Qt Visual Studio 2015 插件编译问题
- numpy - 多特征 CNN 分类模型的 Keras 输入形状不匹配错误
- barcode - 条码的准确性
- r - 如何将 3 个子向量直接融合为 1 个
- python - 在迭代列表时执行操作