R Ggplot,最后一个几何点着色覆盖第一个着色

R Ggplot,最后一个几何点着色覆盖第一个着色,r,ggplot2,geom-point,R,Ggplot2,Geom Point,如何使点的颜色更具体?正如下面的代码所示,我使用的最后一种颜色覆盖了第一种颜色,现在在我的图例中,我有相同颜色的data1和data2,这不是我想要的 ggplot(data,aes(x,y,color,group))+ geom_point(data1,aes(fill="data1"),shape="*",size=12,color="blue")+ geom_point(data2,aes(fill="data2&quo

如何使点的颜色更具体?正如下面的代码所示,我使用的最后一种颜色覆盖了第一种颜色,现在在我的图例中,我有相同颜色的data1和data2,这不是我想要的

ggplot(data,aes(x,y,color,group))+
geom_point(data1,aes(fill="data1"),shape="*",size=12,color="blue")+
geom_point(data2,aes(fill="data2"),shape="*",size=12,color="red")

首先,为了突出显示由特定条件下的数据派生的数据1和数据2,让我们讨论一下示例中的实际情况。然后,我将提供两种解决方法

OP的例子中到底发生了什么 下面是OP的一个例子:

library(ggplot2)

set.seed(8675309)
data1 <- data.frame(x=1:10, y=rnorm(10, 10))
data2 <- data.frame(x=sample(1:10, 10, replace=TRUE), y=rnorm(10, 11, 0.4))

ggplot(mapping= aes(x=x, y=y)) +
  geom_point(data=data1, aes(fill='data1'), shape='*', size=12, color='blue') +
  geom_point(data=data2, aes(fill='data2'), shape='*', size=12, color='red')

过涂的原因很简单:OP在
aes()
中设置了
fill
美学,然后离散地调整了
color
修改器。因此,图例并不反映
颜色的差异,而是反映
填充的差异。由于“*”不是具有
填充的形状
,因此除了
颜色
的差异外,外观上没有任何差异

如何修复 有两种方法可以解决这个问题。两者都涉及将
color
从外部
aes()
移动到内部
aes()
。一种方法将两个数据集
data1
data2
作为OP拥有的独立数据帧进行维护,其中每个数据集都有一个
geom_点
调用,第二种方法应用原则,通常是使用
ggplot2
进行绘图的更好实践

不整洁的方式

对于
geom_point
调用,将
color
移动到
aes()
内部,并移除
fill
,因为它不适用于此处。这样做的结果将意味着
ggplot
将创建一个图例,并将“data1”和“data2”添加到该图例中。颜色是自动选择的,但是如果我们想指定颜色,我们可以使用
scale\u color\u manual()

顺便说一下,如果将
color
放在
aes()
内部和外部,则
aes()
外部的
color
将覆盖
aes()
函数内部的颜色。这意味着您的点将是正确的颜色,但不会绘制图例

整洁的数据方式

同样,这种方式更受欢迎。其想法是,您应该将数据集合并为一个,添加一列以区分数据的来源。然后使用该列指示如何标记点并为其着色。只需调用一次
geom_point
即可完成此操作。在这个特定的例子中,它可能看起来没有那么大的改进,但是如果你有10个数据集,那么考虑它的区别是什么。
library(dplyr)
library(tidyr)

# note we add a named list to ensure the id column is correctly populated
df <- bind_rows(list(data1=data1, data2=data2), .id="id")

ggplot(df, aes(x=x, y=y, color=id)) + geom_point(shape='*', size=12) +
  scale_color_manual(values=c('blue', 'red'))

覆盖颜色图例的美学效果

首先透视较长的“数据”,然后使用一个geom_point命令并填充组名well,这对我不起作用,因为我已经在美学和组中使用了颜色,还有另一个原因来给线条上色。当我尝试手动缩放(值=c('blue','red')时,会出现以下错误:手动缩放中的值不足。需要6个,但只提供了2个。我明白了-你最初的问题中没有提供这些信息。如果您可以添加一个数据示例,您可能会得到该特定问题的解决方案。。。。另一种方法是,通过选择具有填充的点形状(并将颜色设置为NA或黑色)仅使用填充美学。无论如何,我已将您的规定添加到答案中作为编辑。其中一种方法应该适用于您的情况,但如果不适用,我会要求您将其作为单独的问题发布,指出您存在冲突的地方。
ggplot(mapping= aes(x=x, y=y)) +
  geom_point(data=data1, aes(color='data1'), shape='*', size=12) +
  geom_point(data=data2, aes(color='data2'), shape='*', size=12) +
  scale_color_manual(values=c('blue', 'red'))
library(dplyr)
library(tidyr)

# note we add a named list to ensure the id column is correctly populated
df <- bind_rows(list(data1=data1, data2=data2), .id="id")

ggplot(df, aes(x=x, y=y, color=id)) + geom_point(shape='*', size=12) +
  scale_color_manual(values=c('blue', 'red'))
ggplot(mapping= aes(x=x, y=y)) +
  geom_point(data=data1, aes(fill='data1'), shape=21, size=12, color='NA') +
  geom_point(data=data2, aes(fill='data2'), shape=21, size=12, color='NA') +
  scale_fill_manual(values=c('data1'='blue', 'data2'='red'))
ggplot(mapping= aes(x=x, y=y)) +
  geom_point(data=data1, aes(fill='data1'), shape='*', size=12, color='blue') +
  geom_point(data=data2, aes(fill='data2'), shape='*', size=12, color='red') +
  guides(
    fill=guide_legend(override.aes = list(color=c('blue','red')))
  )