2017-05-27 93 views
2

這應該很簡單,但我得到一些錯誤。我想複製然後自定義次y軸的標籤。複製和自定義第二y軸

首先,這個簡單的代碼應該產生如下圖所示:

ggplot(data = mpg, aes(x = displ, y = hwy)) + 
     geom_point() + 
     scale_x_continuous(sec.axis = dup_axis()) + 
     scale_y_continuous(sec.axis = dup_axis()) 

enter image description here

但我不知道爲什麼我收到以下錯誤(它的工作原理沒有scale_參數和我有GGPLOT2版本2.2.1):

Error in .Call(rhs, f) : first argument must be a string (of length 1) or native symbol reference

其次,一旦y軸被複制我在右側,我想更改標記(20,30,40),例如(「a」,「b」,「c」)。

我該如何解決該錯誤並自定義次y軸的刻度標籤?

+0

黑暗中的一擊:你能在其他代碼之前運行庫(「lazyeval」)嗎? –

回答

3

該代碼的第一部分對我來說同樣適用於ggplot2(2.2.1)。關於你的第二個問題,使用sec_axis()來完成這項工作。第一個參數是變換公式trans,因爲你想擁有同樣的規模,但僅更改標籤,然後使用~ . * 1如:

ggplot(data = mpg, aes(x = displ, y = hwy)) + 
    geom_point() + 
    scale_x_continuous(sec.axis = dup_axis()) + 
    scale_y_continuous(sec.axis = sec_axis(~ . * 1, breaks = c(20,30,40), labels = c("a","b","c"))) 

enter image description here

注:請注意,「轉型爲副軸線必須是一個公式「。

+1

清晰,快捷,謝謝。我回答自己關於錯誤的第一個問題。似乎在環境中有一些東西在加載ggplot2時導致錯誤('因爲rhs已經在'lazyeval'命名空間中定義了',未能爲rhs指定NativeSymbolInfo),因此阻止我做這種圖形(我認爲它與符號€)有關。爲了解決這個問題,我在開始之前清理了我的環境('rm​​(list = ls())') – jlp