从手动值在ggplot中分配颜色

时间:2018-10-10 08:05:11

标签: r ggplot2

我有一个df_Filtered的df,看起来像这样:

Country Region  Sales Year Colour   
Germany Berlin  2000  2000 #FF0000
Germany Hamburg 1500  2001 #33CC33
Germany Kiel    2150  2002 #00FF00
UK      London  1200  2000 #CC0000
UK      York    1300  2001 #FFFF33
UK      Leeds   2000  2002 #339900
Japan   Tokyo   500   2000 #66CC00
Japan   Kyoto   750   2001 #990099

我想绘制每个地区的数据以及每年的销售价值:

ggplot(df_Filtered, aes(x = Year, y = Sales, colour = Region, scale_y_continuous(breaks = 1), size=mysize, labels=as.matrix(df_Filtered_regions))) +  geom_line() +
    labs(x = "Years", y = "Sales", title = NULL) + 
    scale_x_continuous(breaks = c(2000, 2001, 2002)) + 
    scale_size(range = c(1, 4), guide="none") +
    theme(panel.background = element_blank()) + 
    theme(legend.position="bottom") +
    scale_color_discrete(name=NULL) +
    theme(plot.background = element_rect(colour = "black", size = 1)) +
    theme(axis.line = element_line())

请注意,我还有一个向量,用于表示要在实际数据中使用的行的大小。在实际代码中,代表平均国家/地区价值的行较粗,但为了简化起见:

Size = 2
df_Filtered$mysize <- rep(Size, nrow(df_Filtered))

我想将Colourdf_Filtered列中的颜色用于绘图中的线条。我该怎么做呢?

(我以前尝试通过自动过程分配颜色a,但是效果不太好:Different colour palettes for different series ggplot

1 个答案:

答案 0 :(得分:2)

请在以后的问题中尽力提供有效的代码,尤其是因为ggplot2构造在许多地方严重不正确。我也强烈建议您不要使用为最终绘图选择的颜色。最后,十进制的ascii代码字符32(即“”)是免费的,我怀疑采用并坚持使用一种代码格式样式将有助于避免将来出现某些绘图构造错误。

您可以使用I()使用预生成的geom组件颜色,该颜色标记为“ asis”列,通知ggplot2仅使用指定的值。

library(ggplot2)

read.csv(text="Country,Region,Sales,Year,Colour
Germany,Berlin,2000,2000,#FF0000
Germany,Hamburg,1500,2001,#33CC33
Germany,Kiel,2150,2002,#00FF00
UK,London,1200,2000,#CC0000
UK,York,1300,2001,#FFFF33
UK,Leeds,2000,2002,#339900
Japan,Tokyo,500,2000,#66CC00
Japan,Kyoto,750,2001,#990099", stringsAsFactors = FALSE) -> xdf

xdf$mysize <- rep(2, nrow(xdf))

ggplot(xdf) +  
  geom_line(
    aes(
      x = Year, y = Sales, group = Country,
      colour = I(Colour), size = mysize
    )
  ) +
  scale_x_continuous(breaks = c(2000, 2001, 2002)) + 
  scale_y_continuous(breaks = 1) +
  scale_size(range = c(1, 4), guide = "none") +
  labs(x = "Years", y = "Sales", title = NULL) + 
  theme(axis.line = element_line()) +
  theme(panel.background = element_blank()) + 
  theme(plot.background = element_rect(colour = "black", size = 1)) +
  theme(legend.position = "bottom")

enter image description here

ggplot2绘图惯用法在使用时变得更容易理解。练习是必不可少的。

您想要一个图例,但是您没有遍历如何使用手动色标。我们将从您指定的数据中构建命名向量:

manual_scale_colors <- setNames(xdf$Colour, xdf$Region)

然后删除I()并重新添加手动比例调用:

ggplot(xdf) +  
  geom_line(
    aes(
      x = Year, y = Sales, group = Country,
      colour = Region, size = mysize
    )
  ) +
  scale_x_continuous(breaks = c(2000, 2001, 2002)) + 
  scale_y_continuous(breaks = 1) +
  scale_color_manual(values = manual_scale_colors) +
  scale_size(range = c(1, 4), guide = "none") +
  labs(x = "Years", y = "Sales", title = NULL) + 
  theme(axis.line = element_line()) +
  theme(panel.background = element_blank()) + 
  theme(plot.background = element_rect(colour = "black", size = 1)) +
  theme(legend.position = "bottom")

enter image description here