2014-09-02 20 views
11

Chcę przekazać trzy rodzaje informacji w wykresu punktowym. Mogę używać koloru, kształtu i wypełnienia (moje aktualne dane mają zbyt wiele punktów, aby efektywnie wykorzystać rozmiar). Ale najlepiej by wyglądało, gdyby kolor wypełnienia był taki sam jak kolor konturu.Wypełnione i puste kształty, w których kolor wypełnienia = kolor linii

Najbliżej mogę dostać to:

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

który wypełnia czarny we wszystkich kolorach zarys, brzydkie. Wszelkie pomysły na to, jak wypełnić czerwone punkty czerwonymi i niebieskimi punktami niebieskimi?

Odpowiedz

17

Przedstaw NA i map tych, do koloru NA z 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 

Produkuje:

enter image description here


EDIT: W odpowiedzi na Pana Flick, możemy oszukać i dodać warstwy/alfa. Uwaga musimy dodać warstwę bo o ile wiem, nie ma sposobu, aby kontrolować alfa niezależnie do koloru i wypełnić:

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

+1

Clever. Ale nie jest łatwo dodać legendę dla wartości "vs" wskazującą, które z nich są wypełnione, a które puste, prawda? W tej chwili nie jest jasne, jaka jest różnica między wypełnionymi i pustymi. – MrFlick

+1

@ MrFlick, uczciwa krytyka. Zobacz aktualizację. – BrodieG

+1

Kolejne sprytne rozwiązanie/obejście. Żałuję, że mam tylko jeden głos do oddania. – MrFlick

Powiązane problemy