2017-04-04 91 views
0

我的目標是根據數據縮放ggplot中geom_line的線寬。我已經閱讀了一些相關的帖子,但我仍然努力實現自己的目標。相關職位包括:使用ggplot和geom_line美學根據數據更改線寬度

這篇文章是我非常關注的問題,雖然我感到困惑的地方Freq在實例初始化:Different size for lines in ggplot2's geom_line

這裏是我的代碼。請注意,我用發生變異初始化一個新的變量,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) 

所以,我想作出一些特別的線路(符合VAR1的那些==' foo')厚度爲2,其餘爲厚度1.因爲我希望大小根據數據而有所不同,所以我在geom_line中使用了aes。由此產生的圖像不是我所期待的 - 較粗的線條很大,其他線條比默認線條更粗。當我將line_size中的值更改爲較小的值(如0.1和0.05)時,線條粗細不會改變。我檢查了我正在繪製的數據框的內容(exps),並且line_size被初始化爲我所期望的(一排沒有NAs的雙打)。

很明顯,我在這裏沒有正確使用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...   
+0

顯示一些數據或沒有人可以幫你 –

+0

發佈了一些數據 – Kulluk007

+0

在這裏所做的回答得到你想要的是什麼? http://stackoverflow.com/questions/17996410/ggplot-specific-thick-line –

回答

1

你想用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)) 
+0

謝謝B威廉姆斯 - 這對我有用,我得到了預期的結果。爲了我自己的理解,我之前的行爲究竟發生了什麼?我所提供的大小值是不是直接使用,而是映射到某個預設大小的數組(有點像線型的工作原理)? – Kulluk007

+1

你說的尺寸有所不同,但並沒有真正定義它們應該如何變化 –