R:Axis tick标签从数组中动态上标

时间:2016-06-27 09:53:31

标签: r plot ggplot2 superscript

我正在尝试使用R中的上标为ggplot2生成轴刻度。我想要一个类似于此的情节: Plot from python

但我能做的那个看起来像这样:Plot using ggplot2 R

注意轴在y轴上打勾。 python有10个 2 ,10 4 ,10 6 我想用R创建 用我的代码,我无法这样做。

+scale_y_continuous(labels = function(x){return (paste("10^", x,sep = ""))})

我使用此代码在R图中创建标签。即10 ^ 2,10 ^ 4,10 ^ 6等 我尝试使用函数表达式及其在不同论坛上提供的所有变体:

+scale_y_continuous(labels = function(x){return (expression(10^x))}

但是它们都产生了相同的输出,即所有蜱上的10 x ,10 x ,10 x 。表达式函数不理解字符和变量之间的区别。

我如何完成蜱类如10 2 ,10 4 ,10 6 而无需手动设置每个蜱的值。由于我的代码使用值数组生成刻度标签,我无法手动执行此操作。我一次生成数百个图,所以我需要通过读取y轴值并相应地转换它们来动态地完成它。

我不想更改号码的格式。我的数组已经计算了log(x)值,我只想在它后面添加一个10并使其成为上标。 使用scientific_format更改格式不是我正在寻找的解决方案,因为我想要一种可以将文本更改为10 2 形式的方法。我想添加标签而不应用任何格式更改数据。

1 个答案:

答案 0 :(得分:3)

我认为scale_y_continuous(labels = math_format(10^.x))就是你想要的:

library(scales); library(ggplot2)
a <- ggplot(iris, aes(x=Sepal.Length, y=Petal.Length)) + geom_point()   # Left (to compare)
b <- a + scale_y_continuous(labels = math_format(10^.x))   # Middle 
c <- b + annotation_logticks(side="l")                     # Right
   # (Note; "10^.x" is default value, so it is omissible.)
print(a); print(b); print(c)

enter image description here