私は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)
誰でも致命的な欠陥を見ることができますか?なぜこのコードがこのようにグループ間で機能しないのですか?
よろしくお願いします
unique
とas.character
を使用すると機能します。
ggplot(data = df, aes(col, D, colour = zone))+
geom_point() +
scale_colour_manual(breaks = df$zone,
values = unique(as.character(df$color.codes)))
スヴェンは数秒で私を倒しましたが、少し異なります:
df.unique <- unique(df[, c("zone", "color.names")])
p + scale_colour_manual(breaks = df.unique$zone, values = as.character(df.unique$color.names))