我的目标是根据数据缩放ggplot中geom_line的线宽。我已经阅读了一些相关的帖子,但我仍在努力实现我的目标。相关文章包括:
这篇文章非常接近我的问题,虽然我对在该示例中初始化Freq
的位置感到困惑:Different size for lines in ggplot2's geom_line
这是我的代码。请注意,我正在使用mutate初始化一个新变量line_size,然后我在geom_line中使用它:
suppressWarnings(suppressMessages(library(dplyr)))
library(ggplot2)
exps <- mutate(exps, line_size = ifelse( var1 == 'foo', 2, 1 ))
# (this is in a function, so I'm using aes_string to interpret ind_var_arg, which is a function argument)
ggplot(exps, aes_string(x="ind_var_arg", y=dep_var)) +
geom_line(aes(size=line_size, linetype=major_version,
color=config), alpha=alpha_level)
所以,我试图制作一些厚度为2的特定线(与var1 =='foo'匹配的线),其余的厚度为1.因为我希望尺寸根据数据而变化,我我在geom_line中使用了aes。生成的图像不是我所期望的 - 较粗的线条很大,而其他线条比默认线条粗。当我将line_size中的值更改为更小的值(如0.1和0.05)时,线条粗细不会更改。我检查了我正在绘制的数据框的内容(exps),并且按照我的预期初始化了line_size(没有NA的一行双精度)。
显然我在这里没有正确使用line_size。我究竟做错了什么?我想明确地使用line_size的内容作为该特定行的行大小。
这是我正在绘制的数据框架的结构:
glimpse(exps)
$ dep_var <int> 1000000, 1000000, 1000000, 1000000...
$ config <chr> "config1", "config1", "config2", ...
$ ind_var_arg <dbl> 5198283352, 420183942, 125450482, ...
$ var1 <chr> "bar", "foo", "bar", "bar", "bar",...
$ major_version <chr> "ONE", "TWO", "ONE", "ONE", "ONE",...
$ line_size <dbl> 0.005, 20.000, 0.005, 0.005, 0.005...
答案 0 :(得分:2)
您想使用line_size_discrete()
。您可以跳过创建line_size列并将图形基于您已有的图形。
library(tidyverse)
exps %>%
ggplot(aes(ind_var_arg, dep_var)) +
geom_line(aes(size=var1, line_type=major_version, color=config)) +
scale_size_discrete(range = c(1, 2))