考虑这个简单的例子
library(dplyr)
library(forcats)
library(ggplot2)
mydata <- data_frame(cat1 = c(1,1,2,2),
cat2 = c('a','b','a','b'),
value = c(10,20,-10,-20),
time = c(1,2,1,2))
mydata <- mydata %>% mutate(cat1 = factor(cat1),
cat2 = factor(cat2))
> mydata
# A tibble: 4 x 4
cat1 cat2 value time
<fct> <fct> <dbl> <dbl>
1 1 a 10.0 1.00
2 1 b 20.0 2.00
3 2 a -10.0 1.00
4 2 b -20.0 2.00
现在,我想创建一个图表,在其中交互两个因子变量。我知道我可以使用interact
(ggplot2
见下文)。
我的大问题是我不知道如何自动化交互的标签(和着色),这样我就可以避免使用scale_colour_manual
.
例如:
ggplot(mydata,
aes(x = time, y = value, col = interaction(cat1, cat2) )) +
geom_point(size=15) + theme(legend.position="bottom")+
scale_y_continuous(breaks = scales::pretty_breaks(n = 10)) +
theme(legend.position="bottom",
legend.text=element_text(size=12, face = "bold")) +
scale_colour_manual(name = ""
, values=c("red","red4","royalblue","royalblue4")
, labels=c("1-b","1-a"
,"2-a","2-b"))
显示:
由于我在scale_colour_manual()
. 事实上,鲜红的点是1-a
和不是1-b
(注意标签是如何简单地连接变量名)。这个想法是,随着因子水平的增加,猜测正确的顺序可能会很棘手。
有没有办法自动化这个标签(更好:标签和着色)?也许使用forcats
?也许事先在数据框中将标签创建为字符串?
谢谢!