web-dev-qa-db-ja.com

ggplot:ユーザー定義の色に基づいて、グループごとのカラーポイント

私はggplotでプロットされたポイントのグループの色を定義しようとしています。私はこの投稿のコードを適合させました:

定義されたカラーコードに基づくカラーggplotポイント

しかし、同じグループ変数で複数の行を定義すると(行ごとに別々の色ではなく)、コードは失敗し、その理由を理解できません。以下は再現可能な例です:

#create some data
zone  <- c("E","E","C","C","C","E","E") #grouping variable
col <- c(50,100,150,200,250,300,350) #x variable
D <- c(.4,.45,.20,.22,.30,.31,.35) #y variable
df1 <- data.frame(zone, D, col); df1

#create a colour scheme based on grouping variable 'zone'
zone <-c("E","C")
color.codes<-as.character(c("#3399FF", "#FF0000"))
color.names<-c("blue", "red")
df2=data.frame(zone, color.codes, color.names); df2

# merge color specifications with data
df <-merge(df1,df2, by=("zone"), all.x=TRUE, all.y=TRUE); df 

データは次のようになります。

zone    D   col color.codes color.names
C     0.20  150     #FF0000         red
C     0.22  200     #FF0000         red
C     0.30  250     #FF0000         red
E     0.40   50     #3399FF        blue
E     0.45  100     #3399FF        blue
E     0.31  300     #3399FF        blue
E     0.35  350     #3399FF        blue

目標は、ゾーン「C」のポイントが赤で「E」のポイントが青のプロットを作成することですが、引用されている例のコードを使用すると、すべてが赤でプロットされます。

p <- ggplot(data=df, aes(col, D, colour = zone))+ 
  geom_point() 
p + scale_colour_manual(breaks = df$zone, values = df$color.codes)

誰でも致命的な欠陥を見ることができますか?なぜこのコードがこのようにグループ間で機能しないのですか?
よろしくお願いします

12
user3267282

uniqueas.characterを使用すると機能します。

ggplot(data = df, aes(col, D, colour = zone))+ 
  geom_point() +
  scale_colour_manual(breaks = df$zone, 
                      values = unique(as.character(df$color.codes)))

enter image description here

5
Sven Hohenstein

スヴェンは数秒で私を倒しましたが、少し異なります:

df.unique <- unique(df[, c("zone", "color.names")])
p + scale_colour_manual(breaks = df.unique$zone, values = as.character(df.unique$color.names))
0
BrodieG