我正在尝试使用ggplot2创建多个图,我希望它为每种因子类型始终分配相同的颜色。
这里有一个玩具示例。
is_lvalue_reference<...>
我首先将类别转换为因子,以便始终分配相同的值,因为它在我做过的其他绘图中都起作用。
我想以两种方式根据类别分组的值创建两个密度图(或类似的图),一种使用“ from”列的类别,另一种使用“ to”列的类别,使用相同的方法传说。
mydata <- data.frame(from=rep(c("b","c"), each=15),
to=rep(c("a","b","c"), each=10),
value=c(rep(1:5,5:1),rep(1:5,1:5)) )
现在我生成图。 首先,按照“来自”列进行分组。
niv <- c("a", "b", "c")
colo <- c("black", "red", "blue")
mydata$from <- factor(mydata$from, levels=niv)
mydata$to <- factor(mydata$to, levels=niv)
如您所见,由于它显示了一个“ a”因子,但它并不产生所需的图,但是在“ from”列中却不存在。
现在按“收件人”列进行分组。
ggplot(mydata) + stat_density(geom="line",size=0.8,
position = "identity", aes(x=value, color=from)) +
scale_colour_manual(name="Type",labels = niv,
values=colo) + theme_bw()
它按预期工作。
现在,我尝试再次生成没有标签参数的第一个情节。
ggplot(mydata) + stat_density(geom="line",size=0.8,
position = "identity", aes(x=value, color=to)) +
scale_colour_manual(name="Type",labels = niv,
values=colo) + theme_bw()
现在,它可以正确地标记类别,但是颜色与第二个图不匹配。
我该怎么办?
真正的问题有更多的类别和很多的值。
答案 0 :(得分:1)
您可以在scale_color_manual
中使用命名矢量将Type
显式映射到颜色:
color_map <- c("a" = "black", "b" = "red", "c" = "blue")
scale_colour_manual(values=color_map)
来自help(scale_color_manual)
:
值
一组用于将数据值映射到的美学值。如果这是一个 命名向量,则将根据名称匹配值。如果 未命名,值将按顺序(通常按字母顺序)与 规模限制。任何不匹配的数据值将是 给定na.value。
以下是完整的代码,我相信这些代码会生成您想要的输出:
library(tidyverse)
mydata <- data.frame(
from = rep(c("b", "c"), each = 15),
to = rep(c("a", "b", "c"), each = 10),
value = c(rep(1:5, 5:1), rep(1:5, 1:5))
)
niv <- c("a", "b", "c")
colo <- c("black", "red", "blue")
color_map <- set_names(colo, niv)
mydata$from <- factor(mydata$from, levels = niv)
mydata$to <- factor(mydata$to, levels = niv)
ggplot(mydata) + stat_density(
geom = "line", size = 0.8,
position = "identity", aes(x = value, color = from)
) +
scale_colour_manual(name = "Type", values = color_map) + theme_bw()
ggplot(mydata) + stat_density(
geom = "line", size = 0.8,
position = "identity", aes(x = value, color = to)
) +
scale_colour_manual(
name = "Type",
values = color_map
) + theme_bw()