R语言qplot中如何将散点渐变颜色改为与第二幅图一致的离散颜色
看起来你想要让第一幅图的散点颜色和第二幅图的离散颜色保持统一,我来帮你搞定这个问题!首先我先补全你提供的代码片段(因为freq向量没写完),然后基于ggplot2(R中最常用的绘图包)给出两种解决方案,你可以根据实际需求选择:
首先,先准备完整的数据:
# 补全freq向量(假设剩余数值是合理的示例值) area <- c(1:21) time <- c('11','11','11','11','11','00','11','11','11','11','11','11','11','11','11','11','11','11','11','11','11') freq <- c(10,12,3,5,8,15,20,16,30,34,50,40,45,32,28,25,18,12,9,7,4) df <- data.frame(area, time, freq)
方案1:让第一幅图的颜色与第二幅图完全一致(即第一幅图使用离散颜色,对应time分组)
如果你希望第一幅图的每个点颜色和第二幅图中对应点的颜色完全相同,只需要把第一幅图的颜色映射从area改成time即可,这样两幅图的颜色逻辑完全统一:
library(ggplot2) # 第二幅图(离散颜色,按time分组) p2 <- ggplot(df, aes(x = area, y = freq, color = time)) + geom_point(size = 3) + labs(title = "第二幅图:离散颜色(按time)") # 第一幅图(改为和第二幅图一致的离散颜色) p1 <- ggplot(df, aes(x = area, y = freq, color = time)) + geom_point(size = 3) + labs(title = "第一幅图:与第二幅图颜色一致") # 可以用gridExtra包并排展示两幅图 library(gridExtra) grid.arrange(p1, p2, ncol = 2)
方案2:第一幅图保持渐变效果,但色系与第二幅图的离散颜色匹配
如果你想保留第一幅图的渐变效果,同时让渐变的颜色范围和第二幅图的离散颜色对应(比如从第二幅图中00的颜色渐变到11的颜色),可以手动提取第二幅图的离散颜色,然后用它来定义渐变的颜色尺度:
# 先提取第二幅图的离散颜色 discrete_colors <- scales::hue_pal()(length(unique(df$time))) # 这里unique(df$time)是['11','00'],所以discrete_colors是两个颜色值 # 第一幅图:渐变颜色,使用第二幅图的离散颜色作为起止 p1_gradient <- ggplot(df, aes(x = area, y = freq, color = area)) + geom_point(size = 3) + scale_color_gradient(low = discrete_colors[2], high = discrete_colors[1]) + # 对应'00'和'11'的颜色 labs(title = "第一幅图:渐变颜色(与第二幅图色系匹配)") # 第二幅图(离散颜色) p2 <- ggplot(df, aes(x = area, y = freq, color = time)) + geom_point(size = 3) + labs(title = "第二幅图:离散颜色(按time)") grid.arrange(p1_gradient, p2, ncol = 2)
这样第一幅图的渐变颜色会从第二幅图中00的颜色过渡到11的颜色,整体色系和第二幅图保持一致,同时保留了渐变效果。
另外,如果你用的是其他绘图包(比如base R绘图),也可以用类似的思路:先获取离散颜色的取值,然后将数值型的area映射到这些颜色的渐变区间里。
内容的提问来源于stack exchange,提问作者Sweety Rani
相关产品推荐
相关产品推荐

