首页 > 解决方案 > 如何根据此特定条件指定折线图的颜色?

问题描述

我有一个 R 脚本,它从雅虎财经中提取股票价格。R代码没有问题,它们运行得很好。

这是我的 R 代码及其输出的摘录:

df1 %>%
  mutate(ref.date = as.Date(ref.date)) %>%
  arrange(ticker, ref.date) %>%
  group_by(ticker) %>%
  mutate(ticker = paste(ticker, round((last(price.close) - 
                                         first(price.close))/first(price.close) * 100, 2), '%'), 
         label = replace(round(price.close,2), -c(1, n()), '')) %>%
  ggplot(aes(x = ref.date, y = price.close, label = label)) + 
  geom_line(size=1, color="blue") + geom_text(size = 3, fontface="bold") + 
  facet_wrap(~ticker, scales = 'free_y')

输出:

输出

但是,我想根据以下条件修改图表的线条颜色:如果百分比变化为负(在本例中为 HUYA -40.14%),则线条颜色必须为红色,否则必须为蓝色休息。

任何帮助将不胜感激。

标签: rggplot2

解决方案


这应该为整条线着色,但没有数据,我无法检查。

为了清晰起见,我将change其作为单独的列,并在末尾添加了线条以提供正确的颜色并删除指南。

df1 %>%
  mutate(ref.date = as.Date(ref.date)) %>%
  arrange(ticker, ref.date) %>%
  group_by(ticker) %>%
  mutate(change = last(price.close)/first(price.close) - 1,
         ticker = paste(ticker, round(change*100, 2), '%'), 
         label = replace(round(price.close,2), -c(1, n()), '')) %>%
  ggplot(aes(x = ref.date, y = price.close, label = label)) + 
  geom_line(aes(colour = ifelse(change >= 0, "blue", "red")), size = 1) +
  geom_text(size = 3, fontface="bold") + 
  facet_wrap(~ticker, scales = "free_y") +
  scale_colour_manual(values = c("blue", "red")) +
  guides(colour = "none")

推荐阅读