Заполненные и полые формы, где цвет заливки = цвет линии

Я хочу передать три типа информации в дот-сюжете. Я могу использовать цвет, форму и заполнение (у моих фактических данных слишком много точек, чтобы эффективно использовать размер). Но было бы лучше, если бы цвет заливки был таким же, как цвет контура.

Самое близкое, что я могу получить, это следующее:

data(mtcars)
p <- ggplot(mtcars,aes(x=mpg,y=wt))+
  geom_point(aes(color=factor(cyl),shape=factor(gear),fill=factor(vs)))+
  scale_fill_manual(values=c("black",NA))+scale_shape_manual(values=c(21,22,23))

enter image description here

который заполняет черный цвет всеми контурными цветами, уродливо. Любые идеи о том, как заполнить красные точки красным, а синие точки - синим?

Ответ 1

Ввести NA и сопоставить их с цветом NA с помощью scale_fill_discrete:

ggplot(mtcars,aes(x=mpg,y=wt)) +
  geom_point(size=10,
    aes(
      color=factor(cyl), 
      shape=factor(gear), 
      fill=factor(ifelse(vs, NA, cyl))            # <---- NOTE THIS
  ) ) +
  scale_shape_manual(values=c(21,22,23)) +
  scale_fill_discrete(na.value=NA, guide="none")  # <---- NOTE THIS

Выдает:

enter image description here


EDIT: Чтобы обратиться к г-ну Флику, мы можем обманывать и добавлять слои/альфа. Обратите внимание, что нам нужно добавить слой, потому что, насколько я знаю, нет никакого способа управлять альфой самостоятельно для цвета и заливки:

library(ggplot2)
ggplot(mtcars,aes(x=mpg,y=wt, color=factor(cyl), shape=factor(gear))) +
  geom_point(size=10, aes(fill=factor(cyl), alpha=as.character(vs))) +
  geom_point(size=10) +      
  scale_shape_manual(values=c(21,22,23)) +
  scale_alpha_manual(values=c("1"=0, "0"=1))

enter image description here