这个问题是我发布到 stackoverflow 的上一个问题的后续问题,该问题已经得到解决。我想再次感谢受访者花时间回答上一个问题。为了简洁起见,我不会重现上一个问题的细节,因此请参考超链接查看数据集以便重现问题。
总之,我有一个图,涉及根据“公式”列按颜色分组的三组点,以及使用线型和大小分组的八条非彩色线,后者映射到两个不同的分组变量(“Fa.IVIVC”)和“突出显示”)。下面再现了所使用的命令,然后是结果图。
> ggplot() +
+ geom_point(data = df, aes(
+ x = invitro,
+ y = invivo,
+ colour = factor(Form, labels = c("Fast", "Medium", "Slow"))
+ )) +
+ geom_line(
+ data = line_data,
+ aes(x = invitro, y = Fabs, linetype = `Fa.IVIVC`, size = Highlight)
+ ) +
+ labs(title = "Plot", colour = "Formulation") +
+ scale_x_continuous(limits = c(0, 100)) +
+ scale_y_continuous(limits = c(0, 100)) +
+ guides(size = FALSE) +
+ scale_size_manual(values = c("TRUE" = 2, "FALSE" = 0.5)) +
+ theme(
+ panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
+ panel.background = element_blank(), axis.line = element_line(colour = "black")
+ )
Run Code Online (Sandbox Code Playgroud)
请注意,上述命令作用于一个数据帧,该数据帧已增强为我使用 dput() 发布的原始数据帧。
上一篇文章的全部目的是找出如何在繁忙的情节中突出显示两条线。然而,除非图例还显示指定厚度的相关线,否则该目标的清晰度会降低。我不想用太多的传说来扰乱情节,目前,传说“Formulation”和“Fa.IVIVC”似乎就足够了。所以,我真的希望变量“Highlight”= TRUE 的线条的线宽显示在图例“Fa.IVIVC”中。如何才能做到这一点?
谢谢。
您可以更手动地定义线宽scale_size_manual...
我认为最好稍微修改图例键以删除灰色背景(使其与您的主题匹配)并使用参数增加键的legend.key.width宽度theme(否则你的粗虚线图例只显示一个点)。
ggplot() +
geom_point(data = df, aes(
x = invitro,
y = invivo,
colour = factor(Form, labels = c("Fast", "Medium", "Slow"))
)) +
geom_line(
data = line_data,
aes(x = invitro, y = Fabs, linetype = `Fa.IVIVC`, size = `Fa.IVIVC`)
) +
labs(title = "Plot", colour = "Formulation") +
scale_x_continuous(limits = c(0, 100)) +
scale_y_continuous(limits = c(0, 100)) +
scale_size_manual(values = c("DWeibull" = 0.5, "Fa = Fd" = 2,
"Fa = m*Fd + c" = 0.5, "polyx2" = 0.5, "polyx3" = 0.5,
"powerlaw" = 2, "Sigmoid" = 0.5, "SWeibull" = 0.5,
"Time scale 1" = 0.5, "Time scale 2" = 0.5)) +
theme(
panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
panel.background = element_blank(), axis.line = element_line(colour = "black"),
legend.key = element_blank(), legend.key.width = unit(4,"line")
)
Run Code Online (Sandbox Code Playgroud)