2016-07-15 2 views
0

こんにちは私は以下のプロットを示し、2つの凡例が表示されています。私は質問があります:以下のプロットは、スケールカラーのマニュアルを制御するときに2つの凡例を表示します

現在、私が追加した伝説には6つのエントリ "A Value"、 "au value"、 "b"、 "bD Value"および "bU value"という6つのエントリがあります。私は実際にそれがすでに

  • 「BD & BU」で、伝説にこれがあるべきように、これは青の実線であるべき唯一の4つのエントリ

    • 「A」と凡例のを示すために、伝説にしたいです青い点線のライン...この
    • 「A」を取得すると、それはすでに
    • 「広告& AU」で、伝説にこれがあるべきよう凡例に、これは赤の実線がどうあるべきかわかりません赤いDASHED行...これを実装する方法がわからない

    どのような考えですか?

    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") 
             ) 
    
  • 答えて

    2

    あなたは2つのガイドのひとつでラベルとタイトルを変更したため二伝説がアップ見せています。一致するようにもう一方を変更した場合(または、より適切な場合は、titleの列を目的のラベルに合わせて変更する)、色と線種が一緒に1つの凡例に表示されます。

    また、グループ化が一致する場合(つまり、「U」が「A」と「B」で同じものを意味する場合)、それらのいずれかの色と他の線種を設定できます。あなたが現在やっているようです)。このように:

    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() 
    

    必要に応じて手動で色と線種を設定できます。

    enter image description here

    それとも、あなたの現在のアプローチのために:

    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") 
    ) 
    

    はちょうど2つの線種を設定するには、使用することができます。

    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

    私がお勧めこれは、すべてのラベルを別々にするのではなく(特に、後ほどグループを追加する場合)

    また、間隔を表示する場合は、2行ではなくリボンを使用することを検討しますか?

    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

    その少しクリーナーを感じ、あなたが編集したコードを見ることができるので、私はmergeを使用し、title2を作成するためにifelseを使用することができます。伝説には4つの寓話しか表示されません。それについての考えは?再度、感謝します。 – user3022875

    +0

    'title'の6つのレベルから4つのレベルに潰れて、' title'を再コーディングする新しい列をデータフレームに追加します。次に、その新しい変数を色と線種の美しさに使用します。 – eipi10

    +0

    あなたのプロットでBDとBU(またはadとau)の行を区別する方法は?私は@ eipi10は正しかったと思います。あなたがしたい崩壊した新しい変数を生成する必要があります。 –

    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

    あなたは、私が感謝マーク

    関連する問題