Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Filled and hollow shapes where the fill color = the line color

Tags:

r

ggplot2

I want to convey three types of information in a dot-plot. I can use color, shape and fill (my actual data has too many points to use size effectively). But it would look best if the fill color was the same as the outline color.

The closest I can get is this:

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

which fills black into all outline colors, ugly. Any ideas on how to fill the red points with red and the blue points with blue?

like image 632
PeterK Avatar asked Sep 02 '14 20:09

PeterK


1 Answers

Introduce NA, and map those to the NA color with 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

Produces:

enter image description here


EDIT: To address Mr Flick, we can cheat and add layers / alpha. Note we need to add a layer because as far as I know there is no way to control alpha independently for color and fill:

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

like image 191
BrodieG Avatar answered Oct 24 '22 02:10

BrodieG