根据数据

时间:2017-04-04 18:28:34

标签: r ggplot2

我的目标是根据数据缩放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的内容作为该特定行的行大小。

enter image description here

这是我正在绘制的数据框架的结构:

    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...        

1 个答案:

答案 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))