Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 带有geom_标签的文本颜色_R_Ggplot2_Ggrepel - Fatal编程技术网

R 带有geom_标签的文本颜色

R 带有geom_标签的文本颜色,r,ggplot2,ggrepel,R,Ggplot2,Ggrepel,不是特定于任何特定的代码段,是否有一种相对简单的方法来更改geom_label_排斥框中文本的颜色 具体来说,我有生成下图的代码 标签框中的百分比是最近一周的7天移动平均线相对于前一周的变化百分比。我只想将文本的颜色设置为正值时为红色,负值时为绿色 此图表的数据框可以从复制 绘图代码为 #endpoint layer BaseEndpoints <- smDailyBaseData %>% filter(Base %in% AFMCbases) %>% group_by(

不是特定于任何特定的代码段,是否有一种相对简单的方法来更改geom_label_排斥框中文本的颜色

具体来说,我有生成下图的代码

标签框中的百分比是最近一周的7天移动平均线相对于前一周的变化百分比。我只想将文本的颜色设置为正值时为红色,负值时为绿色

此图表的数据框可以从复制

绘图代码为

#endpoint layer
BaseEndpoints <- smDailyBaseData %>% filter(Base %in% AFMCbases) %>%
  group_by(Base) %>%
  filter(DaysSince == max(DaysSince)) %>%
  select(Base, abbv, DaysSince, newRate,label) %>%
  ungroup()

ZoomEndpoints <- BaseEndpoints %>% filter(Base != 'Edwards') %>%
  mutate(zoom = TRUE)
CAEndPoint <- BaseEndpoints %>% filter(Base == 'Edwards') %>%
  mutate(zoom = FALSE)

ZoomEndpoints <- rbind(ZoomEndpoints, CAEndPoint)

BasePlot <- smDailyBaseData %>% filter(Base %in% AFMCbases) %>%
  ggplot(mapping = aes(x = as.numeric(DaysSince), y = newRate)) +
  geom_line(aes(color=abbv),show.legend = FALSE) +
  scale_color_ucscgb() +
 geom_point(data = BaseEndpoints,size = 1.5,shape = 21, 
            aes(color = abbv,fill = abbv), show.legend = FALSE) +
 geom_label_repel(data=ZoomEndpoints, aes(label=label), show.legend = FALSE,
                   vjust = 0, xlim=c(105,200), size=3, direction='y') +
  labs(x = "Days Since First Confirmed Case", 
       y = "% Local Population Infected Daily") +
  theme(plot.title = element_text(size = rel(1), face = "bold"),
        plot.subtitle = element_text(size = rel(0.7)),
        plot.caption = element_text(size = rel(1))) +
  facet_zoom(xlim = c(50,120), ylim=c(0,0.011),zoom.data=zoom)



print(BasePlot)

是的,就这么简单:

图书馆GGPLOT2
是的,就这么简单:

图书馆GGPLOT2
df这里有一个简单的解决方案,因为你不能同时拥有两个刻度颜色:

该方法的核心是在geom_label_repel调用中手动指定aes外部的颜色。向搜索标签中减号的grepl结果中添加一个允许您对两种颜色进行子集设置。每个标签需要两种颜色,我假设框和文本都需要两种颜色,所以我使用了rep

数据设置


这里有一个简单的解决方案,因为你不能同时拥有两个比例颜色:

该方法的核心是在geom_label_repel调用中手动指定aes外部的颜色。向搜索标签中减号的grepl结果中添加一个允许您对两种颜色进行子集设置。每个标签需要两种颜色,我假设框和文本都需要两种颜色,所以我使用了rep

数据设置



嗨,jerH,这应该是可能的,但是如果你提供一些示例数据的工作代码,会更容易得到帮助。好的……我希望这是一个简单的概念性答案。我将修改操作。我的脚本首先下载一组数据并进行一组操作,这与这个问题无关。我将不得不链接到pastebin上的dput输出,因为它太大,无法包含在帖子中。现在,OP中的代码…嗨,jerH,这应该是可能的,但如果您提供带有一些示例数据的工作代码,将更容易提供帮助。好吧…希望这是一个简单的概念性答案。我将修改操作。我的脚本首先下载一组数据并进行一组操作,这与这个问题无关。我必须链接到pastebin上的dput输出,因为它太大了,无法包含在post.Code中。现在在OP中…好的,所以我肯定应该首先包含绘图代码…现在在OP中。我已经在使用颜色比例来控制线条图中线条的颜色,所以尝试添加“颜色比例”手动替换了这一点。这当然会导致一个错误,因为有11个数据系列…很抱歉撞到了这个旧线程。我在图例中得到了与-1和1因子符号值相同的“a”。知道怎么解决吗?@DeathMetal add key\u glyph=draw\u key\u path到geom\u文本调用中。好的,那么我肯定应该先包含绘图代码……它现在在OP中。我已经在使用颜色比例来控制线条图中线条的颜色,所以尝试添加“颜色比例”手动替换了这一点。这当然会导致一个错误,因为有11个数据系列…很抱歉撞到了这个旧线程。我在图例中得到了与-1和1因子符号值相同的“a”。知道怎么解决吗?@DeathMetal add key_glyph=draw_key_path to the geom_text call。如果你看一下你的输出图表,顶部的Arnold是负值,但它是绿色的,Robins也是,而Hanscom和Kirtland也是负值,但都是红色的。很抱歉,我搞错了正则表达式,因为我没有意识到W-P也有一个-。那就可以了。嘿,今天是星期一!我很感激!我仍然得到混合输出…我将深入研究正则表达式,但如果你碰巧遇到了答案:你有从每个=2到乘以=2的差异?没有捕捉到…就是这样!谢谢如果你看一下你的输出图表,顶部的Arnold是一个负值,但它是绿色的,Robins也是,而Hanscom和Kirtland也是负值,但很抱歉,我搞错了正则表达式,因为我没有意识到W-P也有一个-。那就可以了。嘿,今天是星期一!我很感激!我仍然得到混合输出…我将深入研究正则表达式,但如果你碰巧遇到了答案:你有从每个=2到乘以=2的差异?没有捕捉到…就是这样!谢谢
smDailyBaseData %>% 
ggplot(mapping = aes(x = as.numeric(DaysSince), y = newRate)) +
  geom_line(aes(color=abbv),show.legend = FALSE) +
  scale_color_ucscgb() +
 geom_point(data = BaseEndpoints,size = 1.5,shape = 21, 
            aes(color = abbv,fill = abbv), show.legend = FALSE) +
 geom_label_repel(data=ZoomEndpoints, aes(label=label),
     color = rep(c("green","red")[1+grepl("\\-\\d",as.factor(ZoomEndpoints$label))],times = 2),
     show.legend = FALSE, vjust = 0, xlim=c(105,200),
     size=3, direction='y') +
 labs(x = "Days Since First Confirmed Case", 
       y = "% Local Population Infected Daily") +
 theme(plot.title = element_text(size = rel(1), face = "bold"),
        plot.subtitle = element_text(size = rel(0.7)),
        plot.caption = element_text(size = rel(1))) +
 facet_zoom(xlim = c(50,120), ylim=c(0,0.011),zoom.data=zoom)
#source("https://pastebin.com/raw/Vn2abQ4a")
BaseEndpoints <- smDailyBaseData %>% 
  group_by(Base) %>%
  dplyr::filter(DaysSince == max(DaysSince)) %>%
  dplyr::select(Base, abbv, DaysSince, newRate,label) %>%
  ungroup()
ZoomEndpoints <- BaseEndpoints %>% filter(Base != 'Edwards') %>%
  mutate(zoom = TRUE)
CAEndPoint <- BaseEndpoints %>% filter(Base == 'Edwards') %>%
  mutate(zoom = FALSE)
ZoomEndpoints <- rbind(ZoomEndpoints, CAEndPoint)