2014-09-02 25 views
11

Bir nokta grafiğinde üç tür bilgiyi iletmek istiyorum. Renk, şekil ve dolgu kullanabilirim (gerçek verilerimin boyutu etkili bir şekilde kullanmak için çok fazla puanı vardır). Ancak dolgu rengi anahat rengi ile aynıysa, en iyi görünecektir.Doldurma rengi = satır renginin olduğu çizgi içi boş şekiller =

alabilirim en yakın şudur: çirkin bütün anahat renkleri içine siyah doldurur

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

. Kırmızı noktaları kırmızı ve mavi noktaları maviyle nasıl dolduracağınıza dair bir fikir var mı?

cevap

17

NA tanıtılması ve scale_fill_discrete ile NA renge olanlar map:

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 

üretir:

enter image description here


DÜZENLEME: Mr Flick çözmek için, hile ve ekleyebilirsiniz katmanlar/alfa.

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

Zeki: biz bildiğim kadarıyla renk için bağımsız alfa kontrol etmek ve doldurmak için bir yolu yoktur, çünkü bir katman eklemek gerekir unutmayın. Ama hangisinin doldurulduğunu ve hangisinin boş olduğunu gösteren 'vs' değeri için bir lejant eklemek kolay değil, değil mi? Şu anda dolu ve boş olanlar arasındaki farkın ne olduğu açık değil. – MrFlick

+1

@MrFlick, adil eleştiri. Güncellemeye bakın. – BrodieG

+1

Başka akıllı bir çözüm/çözüm. Verdiğim kadarıyla bir oy verdiğim için pişmanım. – MrFlick