R ggplot2:如何绘制具有纯色和透明笔划且颜色取决于颜色的几何图形点?

R ggplot2:如何绘制具有纯色和透明笔划且颜色取决于颜色的几何图形点?,r,ggplot2,R,Ggplot2,我想做一个散点图,每个点都有一个球体。点及其球体都根据某些列值着色 一个显示我想要什么的最小示例: library(ggplot2) library(vcd) # only needed for example dataset ggplot(Arthritis, aes(x = ID, y = Age)) + geom_point(aes(color=Sex), size=10, alpha=.3) + geom_point(aes(color=Treatment), siz

我想做一个散点图,每个点都有一个球体。点及其球体都根据某些列值着色

一个显示我想要什么的最小示例:

library(ggplot2)
library(vcd) # only needed for example dataset
ggplot(Arthritis, aes(x = ID, y = Age)) + 
    geom_point(aes(color=Sex), size=10, alpha=.3) + 
    geom_point(aes(color=Treatment), size=3)

这个“解决方案”的问题是,使用两个
geom_point
层似乎会弄乱图例。我想只有一个
geom_点
层,并使用一个形状来添加笔划也会更有意义,所以类似这样:

ggplot(Arthritis, aes(x = ID, y = Age)) + 
    geom_point(aes(color=Sex, fill=Treatment), shape=21, size=5, stroke=5)
这里的图例更有意义,但是,我不知道如何使笔划透明。这很重要,因为当点重叠时,您再也看不到任何东西了

像这样的答案不能解决我的问题,因为它们使用恒定的颜色,因此可以使用函数
alpha
。然而,我不知道是否以及如何使用这取决于数据的颜色


TL;DR:我如何绘制具有纯色和透明笔划但不是恒定颜色的
geom_点?

您认识到您可以使用函数
alpha()
,并且意识到您不能将
alpha()
放在
aes()
中。但是,您可以在任何
scale.*
函数中传递
alpha()
作为
values=
参数。下面是一个使用mtcars的示例:

ggplot(mtcars, aes(mpg, disp)) + 
  geom_point(
    aes(color=factor(cyl), fill=factor(carb)),
    shape=21, size=4, stroke=4) +
  scale_color_manual(values=alpha(rainbow(3), 0.2))

一个问题是“
factor(carb)
legend”周围的大黑线对我来说不太合适。超级电子战。你可以使用
guides()摆脱它们
函数,并使用
override.aes=
指定要在此处显示的内容以及替换内容。在这种情况下,可以设置
color=NA
以将继承的美学覆盖为透明(只保留
填充=
部分)


顺便说一句,没有简单的方法将笔划置于“后面”“几何点的填充部分
。您可能可以编写自己的自定义stat/geom来实现这一点,但是
geom_point
总是先用填充,然后用笔划绘制。

一个简单的方法是使较大的透明圆完全不是点,而是填充圆。这样,您可以使用
填充
美学来标记它们。这使用了
ggforce
中的
geom_圆

库(ggplot2)
图书馆(vcd)
图书馆(警队)
GGP(关节炎)+
几何圆(aes(x0=ID,y0=年龄,r=2,填充=性别),α=0.3,颜色=NA)+
geom_点(aes(x=ID,y=年龄,颜色=治疗),大小=3)+
坐标等于()
比例、颜色、离散(h=c(350190))


由(v0.3.0)于2020-07-01创建或制作第二个色标

我还使用了see::geom_point2,因为它不会在透明点周围形成这个小边框

库(ggplot2)
图书馆(vcd)
图书馆(ggnewscale)
图书馆(见)
ggplot(关节炎,aes(x=ID,y=年龄))+
geom_point2(aes(颜色=性别),大小=10,α=0.3)+
新比例颜色()+
geom_点(aes(颜色=处理),尺寸=3)


由(v0.3.0)

非常好的解决方案于2020-07-01创建。
ggplot(mtcars, aes(mpg, disp)) + 
  geom_point(
    aes(color=factor(cyl), fill=factor(carb)),
    shape=21, size=4, stroke=4) +
  scale_color_manual(values=alpha(rainbow(3), 0.2)) +
  guides(fill=guide_legend(override.aes = list(color=NA))) +
  labs(color="cyl", fill="carb")