【发布时间】:2018-08-02 15:15:42
【问题描述】:
考虑这个简单的例子
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
现在,我想创建一个图表,让我交互这两个因素变量。
我知道我可以在ggplot2 中使用interact(见下文)。
我的大问题是我不知道如何自动化交互的标签(和着色),这样我就可以避免使用 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?也许事先在数据框中将标签创建为字符串?
谢谢!
【问题讨论】:
-
您到底想改变什么:标签、分配给因子水平的颜色,或两者兼而有之?你在找什么模式---颜色是基于cat1的?
-
嗨@Camille,理想情况下,我想同时更改颜色和标签。但是,如果这太难了,那么标签是这里的优先事项,因为它们实际上表明了交互是什么
-
@Camille 如示例所示,例如
cat1控制颜色,cat2控制色调