gpt4 book ai didi

r - ggplot : colour points by groups based on user defined colours

转载 作者:行者123 更新时间:2023-12-01 23:21:41 38 4
gpt4 key购买 nike

我正在尝试定义 ggplot 中绘制的点组的颜色。我改编了这篇文章的代码:

Color ggplot points based on defined color codes

但是一旦我有多个由同一分组变量定义的行(而不是每行都有单独的颜色),代码就会失败,我不明白为什么。下面是一个可重现的示例:

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

任何人都可以看到致命的缺陷,为什么这段代码不能以这种方式跨组工作?
提前非常感谢

最佳答案

您处于两种不同的解决方案之间。

一种方法是不将颜色放入 df数据框并指定 zone 之间的映射以及比例调用中所需的颜色:

ggplot(data=df, aes(col, D, colour = zone))+ 
geom_point() +
scale_colour_manual(values=setNames(color.codes, zone))

enter image description here

请注意,这不使用 color.codescolor.names来自df ,也不使用 df2直接(尽管它确实使用用于创建 df2 的列;如果您有类似 df2 的内容,而不是单独的列,则可以使用 setNames(df2$color.codes, df2$zone) 代替)。

另一种方法将颜色直接映射到颜色代码并使用 scale_color_identity ,但随后必须进行一些额外的标记才能获得正确的图例。

ggplot(data=df, aes(col, D, colour = color.codes)) +
geom_point() +
scale_colour_identity("zone", breaks=color.codes, labels=zone, guide="legend")

enter image description here

在我看来,第一个是更好的解决方案。

关于r - ggplot : colour points by groups based on user defined colours,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21536835/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com