复制并自定义次要 Y 轴

6
这应该很简单,但我遇到了一些错误。我想复制并自定义次要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())

在此输入图片描述

但是我不知道为什么会出现以下错误(如果不使用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轴的刻度标签?


一个猜测:你可以在其他代码之前运行library("lazyeval")吗? - Edgar Santos
我认为你是正确的 - 请看下面被接受答案的评论。 - jlp
1个回答

7

对于我来说,代码的第一部分在使用相同版本的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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接