首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何定义线条颜色并在一张图中显示两个图例块

如何定义线条颜色并在一张图中显示两个图例块
EN

Stack Overflow用户
提问于 2021-10-05 19:08:37
回答 2查看 74关注 0票数 2

我有一个如下所示的df,我想生成一个图:

代码语言:javascript
运行
复制
df<-structure(list(AVAL = c(36.9, 37.2, 36.5, 36.7222222222222, 36.9, 
36.9, 36.9, 37.2, 36.9), ADY = c(-9, -1, 1, 8, 15, 15, 15, 22, 
35), PARAMCD = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L
), .Label = "VSTEMP", class = "factor"), Flag = c(NA, NA, NA, 
8, 15, 15, 15, 22, NA), AESER = c(NA, NA, NA, "N", "N", "N", 
"N", "Y", NA)), row.names = 546:554, class = "data.frame")

ggplot(data =df)+
    geom_line(data=df[!is.na(df$AVAL),],aes(x = ADY, y = AVAL, color = PARAMCD, yaxs="d", xaxs="d"),size=0.8)+
    geom_point(data=df[!is.na(df$AVAL),], aes(x = ADY, y = AVAL))+
    geom_vline(aes(xintercept=Flag, color=AESER),lty='dashed')

我的图如下所示:

我想知道是否可以将垂直线定义为black for AESER=="N", and red for AESER=="Y"?另外,对于图例,是否可以只显示垂直线?或者是呈现图例的更好方式,可能是一个块用于度量项目VSTERM,然后另一个块用于AESER: Y|N?有人能在这方面给我指点一下吗?谢谢。

EN

回答 2

Stack Overflow用户

发布于 2021-10-05 19:59:51

选项1:

如果垂直线和geom_line Y/N/VSTEMP的单个图例就足够了,则应该这样做:

代码语言:javascript
运行
复制
ggplot(data =df[!is.na(df$AVAL),], aes(x = ADY, y = AVAL))+
    geom_line(aes(color = 'PARAMCD')), size=0.8) + 
    geom_point() +
    geom_vline(aes(xintercept=Flag, color=AESER), lty='dashed') +
    scale_color_manual(name = "legend_name", values = c(N = "black", Y = "red", VSTEMP = "green")) 

选项2:

在垂直线Y/N的单个图例的情况下

代码语言:javascript
运行
复制
ggplot(data =df[!is.na(df$AVAL),], aes(x = ADY, y = AVAL))+
  geom_line(color='green', size=0.8)+
  geom_point()+
  geom_vline(aes(xintercept=Flag, color=AESER), lty='dashed') +
  scale_color_manual(name = "legend_name", values = c(N = "black", Y = "red")) 

输出:

票数 1
EN

Stack Overflow用户

发布于 2021-10-05 20:10:34

这是一种方法。在绘图中添加具有所需颜色的scale_color_manual

代码语言:javascript
运行
复制
library(ggplot2)

ggplot(data = df[!is.na(df$AVAL), ], aes(x = ADY, y = AVAL)) +
  geom_line(aes(color = PARAMCD), size = 0.8) +
  geom_point() +
  geom_vline(aes(xintercept = Flag, color = AESER), 
             linetype = 'dashed') +
  scale_color_manual(values = c("N" = "black", "Y" = "red", "VSTEMP" = "green"))

编辑

绘图以在注释中回答请求,图例中仅显示AESER

代码语言:javascript
运行
复制
ggplot(data = df[!is.na(df$AVAL), ], aes(x = ADY, y = AVAL)) +
  geom_line(color = "green", size = 0.8) +
  geom_point() +
  geom_vline(aes(xintercept = Flag, color = AESER), linetype = 'dashed') +
  scale_color_manual(name = "AESER", values = c("N" = "black", "Y" = "red"))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69456029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档