2016-07-15 2 views
0

Hallo Ich habe die Handlung unten und es sind 2 Legenden angezeigt. Ich habe eine Frage:Handlung unten zeigt 2 Legenden bei der Kontrolle Skala Farbe Handbuch

Derzeit hat die Legende, die ich hinzugefügt habe, 6 Einträge "A-Wert", "Ad-Wert", "au-Wert", "b", "bD-Wert" und "BU-Wert". Ich möchte wirklich an die Legende nur 4 Einträge anzuzeigen

  • „A“ und in der Legende sollte eine blaue durchgezogene Linie sein, wie es bereits
  • „bd & bu“ ist und in der Legende soll dies sein eine blaue gestrichelte Linie ... nicht sicher, wie diesen
  • „A“ erhalten und in der Legende soll dies eine rote Linie sein, wie es bereits
  • „ad & au“ und in der Legende ist, sollte dies sein, rot VERDAMMTE Linie ... nicht sicher, wie man das umsetzt

Irgendwelche Gedanken?

enter image description here

d = data.frame (title =  c( rep(c("aU","A","ad"),2), rep( c("bU","b","bD"),2)) , 
       time = c(1,1,1,2,2,2,1,1,1,2,2,2) , 
       value = c(10,8,4,9,7,3,5,3,1,4,2,0)) 

d 
ggplot(data=d , aes(x=time, y=value, 
           group=title, 
           colour = title, 
           linetype =title))+ 
    geom_line() + geom_point() + 


     scale_colour_manual(name = "Metric", 

            values = c( 
            A = "red", 
            ad = "red", 
            aU = "red", 
            b = "blue", 
            bU ="blue", 
            bD= "blue"), 

            labels = c( 
            A = "A value", 
            ad = "Ad value", 
            aU = "au value", 
            b = "b", 
            bU ="bU vlaue", 
            bD= "dD Value") 
          )+ 

    scale_linetype_manual(name = "Metric", 
           values =c(
            A = "solid", 
            ad = "dashed", 
            aU = "dashed", 
            b = "solid", 
            bU ="dashed", 
            bD= "dashed"), 
           labels = c( 
            A = "A value", 
            ad = "Ad value", 
            aU = "au value", 
            b = "b", 
            bU ="bU vlaue", 
            bD= "dD Value") 
         ) 

Antwort

2

Die zweite Legende zeigt, weil Sie die Etiketten und Titel in nur einer der beiden Führungen verändert. Wenn Sie die andere ändern, um sie anzupassen (oder noch besser, ändern Sie die title Spalte, damit sie mit den gewünschten Beschriftungen übereinstimmt), werden die Farbe und der Linientyp zusammen in einer Legende angezeigt.

Alternativ, wenn die Gruppierungen übereinstimmen (dh, wenn das "U" in "A" und "B" dasselbe bedeutet), können Sie die Farbe auf einer und den Linientyp auf der anderen setzen (was scheint das zu sein, was Sie gerade tun). Gefällt mir:

d2 <- 
    tidyr::separate(d 
        , title 
        , c("group","subgroup") 
        , 1 
        , FALSE) 

ggplot(data=d2 
     , aes(x=time, y=value, 
      group=title, 
      colour = group, 
      linetype =subgroup))+ 
    geom_line() + geom_point() 

Sie könnten dann Farben und Linientypen manuell einstellen, wenn Sie noch wollten.

enter image description here

Oder für Ihren aktuellen Ansatz:

ggplot(data=d , aes(x=time, y=value, 
        group=title, 
        colour = title, 
        linetype =title))+ 
    geom_line() + geom_point() + 


    scale_colour_manual( 
         values = c( 
         A = "red", 
         ad = "red", 
         aU = "red", 
         b = "blue", 
         bU ="blue", 
         bD= "blue") 
)+ 

    scale_linetype_manual(values =c(
    A = "solid", 
    ad = "dashed", 
    aU = "dashed", 
    b = "solid", 
    bU ="dashed", 
    bD= "dashed") 
) 

nur zwei Linientypen einzustellen, können Sie:

d2$forLabel <- ifelse(d2$subgroup == "", "Value", "Limit") 


ggplot(data=d2 
     , aes(x=time, y=value, 
      group=title, 
      colour = group, 
      linetype =forLabel))+ 
    geom_line() + geom_point() + 
    scale_linetype_manual(values = c(Limit = "dashed" 
            , Value = "solid")) 

enter image description here

Ich würde empfehlen, dies anstelle von separaten Etiketten für alles (insbesondere Falls Sie später weitere Gruppen hinzufügen)

Als eine weitere Alternative, wenn Sie Intervalle anzeigen, würden Sie stattdessen ein Band anstelle von zwei Zeilen verwenden?

d3 <- 
    d2 %>% 
    group_by(group,time) %>% 
    summarise(min = min(value), max=max(value) 
      , value = value[forLabel=="Value"]) 

d3 <- 
    d2 %>% 
    group_by(group,time) %>% 
    summarise(min = min(value), max=max(value) 
      , value = value[forLabel=="Value"]) 


ggplot(data=d3 
     , aes(x=time, y=value, 
      color = group))+ 
    geom_line() + geom_point() + 
    geom_ribbon(aes(ymin = min, ymax = max 
        , fill = group 
        , color = NULL) 
       , alpha = 0.2 
       , color = NA) + 
    theme_minimal() 

enter image description here

+0

Dank Mark, können Sie die bearbeitete Code sehen .Ich möchte, dass die Legende nur 4 Marken zeigt. Irgendwelche Gedanken dazu? Danke noch einmal. – user3022875

+0

Fügen Sie Ihrem Datenrahmen eine neue Spalte hinzu, die den Titel umschreibt, indem Sie ihn aus den sechs Ebenen von title auf nur vier Ebenen zusammenfasst. Verwenden Sie dann diese neue Variable für die Farb- und Linientypästhetik. – eipi10

+0

Wie soll der Leser zwischen den Zeilen BD und BU (oder ad und au) in Ihrer Handlung unterscheiden? Ich denke, @ eipi10 hat jedoch Recht: Sie müssen wahrscheinlich eine neue Variable generieren, die das Kollabieren hat, das Sie ausführen möchten. –

0
d1 <- data.frame(title = c("aU","A","ad","bU","b","bD"), 
       title2 = c("aU & ad", "A", "aU & ad", 
          "bU & bD", "b", "bU & bD")) 

d2 <- merge(d, d1, by = "title") 

ggplot(d2 , aes(x = time, y = value, group = title, 
       colour = title2, linetype = title2)) + 
    geom_line() + geom_point() + 
    scale_colour_manual(name = "Metric", 
         values = c("A" = "red", "aU & ad" = "red", 
            "bU & bD" = "blue", "b" = "blue")) + 
    scale_linetype_manual(name = "Metric", 
          values = c("A" = "solid", "aU & ad" = "dashed", 
             "bU & bD" = "dashed", "b" = "solid")) 

enter image description here

Sie ifelsetitle2 erstellen können, habe ich merge, weil ich seine fühle mich ein bisschen sauberer

Verwandte Themen