如何使用ggplot / R填充轮廓线和填充直方图?

时间:2019-06-19 19:23:47

标签: r ggplot2 tidyverse

请在下面找到My data q

我制作了以下情节:

enter image description here

使用脚本:

library(tidyverse)
w %>% 
  as_tibble() %>% 
  mutate(Studie=as.character(Studie),
         best.resp =as.factor(best.resp)) %>% 
  bind_rows(., mutate(., Studie="all")) %>% 
  count(Studie, best.resp) %>% 
  ggplot(aes(Studie, n, fill= best.resp))  +
  scale_fill_manual(values = c("green", "purple", "yellow")) +
  scale_colour_manual(values = c("blue", "red","orange")) +
  geom_col(position = position_dodge2(preserve = "single", padding = 0))

我希望每个条形周围的轮廓具有一组颜色,而填充则具有另一组颜色。如您所见,我尝试使用scale_fill_manualscale_colour_manual,但这并不能解决我的问题。

我已附上一张图片,说明我的意思是具有一种颜色的轮廓并填充另一种颜色:

enter image description here

My data 
q <- structure(list(Studie = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 
5L), best.resp = c(0L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 
1L, 1L, 0L, 1L, 0L, 1L, 1L, 1L, 0L, 1L, 0L, 1L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 
0L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 
1L, 0L, 0L, 1L, 0L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 0L, 1L, 0L, 0L, 0L, 2L, 0L, 2L)), .Names = c("Studie", 
"best.resp"), class = "data.frame", row.names = c(NA, -106L))

2 个答案:

答案 0 :(得分:2)

您需要将变量映射到颜色美观度(以aes为单位):

ggplot(aes(Studie, n, fill= best.resp, colour = best.resp)  

答案 1 :(得分:1)

我认为您的代码中有w%>%应该是q吗?

您需要在es命令中指定颜色。现在,您只需要填充即可,因此以后的比例尺颜色手册不适用于任何东西。

q %>% 
  as_tibble() %>% 
  mutate(Studie=as.character(Studie),
         best.resp =as.factor(best.resp)) %>% 
  bind_rows(., mutate(., Studie="all")) %>% 
  count(Studie, best.resp) %>% 
  ggplot(aes(Studie, n, color = best.resp, fill= best.resp))  +
  scale_fill_manual(values = c("green", "purple", "yellow")) +
  scale_colour_manual(values = c("blue", "red","orange")) +
  geom_col(position = position_dodge2(preserve = "single", padding = 0))