在不改变ggplot2中的原始数据的情况下转换y轴

时间:2017-07-27 20:28:56

标签: r ggplot2

我有一个关于如何在ggplot2中转换y轴的问题。我的情节现在有两条线和散点图。对于散点图,我对零周围的区域非常感兴趣。有没有办法扩大0%到5%之间的空间,缩小20%到30%之间的空间? 我试过用     coord_trans(y =" log10") 转换成日志形式。但在这种情况下,我有很多负值,所以如果我想使用sqrt或log,将删除负值。你有什么建议吗?

以下是我的数据点的示例。

df1 = data.frame(y = runif(200,min = -1, max = 1))
df1 = data.frame( x= seq(1:200), y = df1[order(abs(df1$y)),])
ggplot(df1) + geom_point(colour = "black",aes(x,y) ,size = 0.1) 

我希望在0%到5%之间留出更多空间,在5%到30%之间留出更少的空间。

我尝试使用trans_new()来转换轴。

eps <- 1e-8

tn <- trans_new("logpeps",
                function(x) (x+eps)^(3),
                function(y) ((y)^(1/3) ),
                domain=c(- Inf, Inf)
              )

ggplot(df1)+ geom_point(colour = "black",aes(x,y) ,size = 0.1) + 
  # xlab("Observations sorted by PD in v3.1") + ylab("Absolute PD difference ") + 
  # ggtitle("Absolute PD for RiskCalc v4.0 relative to v3.1") +

  scale_x_continuous(breaks = seq(0, round(rownum/1000)*1000, by = round(rownum/100)*10)) + 
  scale_y_continuous(limits = c(-yrange,yrange),breaks = c(-breaksY,breaksY),
                     sec.axis = sec_axis(~.,breaks = c(-breaksY[2:length(breaksY)],breaksY), labels = scales:: percent
                                        )) +
#   geom_line(data = df, aes(x,y[,3], colour = "blue"),size = 1) +  
#   geom_line(data = ds,aes(xval, yval,colour = "red"),size = 1) + 
  coord_trans(y = tn) +
  scale_color_discrete(name = element_blank())

但是它将绘图压缩到与我想要的中心相反的中心。然后我尝试使用y = y ^ 3,但它显示了ERROR:zero_range(范围)

欣赏!!

enter image description here

2 个答案:

答案 0 :(得分:0)

尝试对y值进行立方根变换:

aes(y=yVariable^(1/3))

或使用trans_new()定义一个新的转换(例如立方根,带有令人满意的断点和标签)。

答案 1 :(得分:0)

一些想法:

你可以像这样删除图的空边:

scale_y_continuous(expand = c(0,0))

如果您想尝试日志转换,请执行以下操作:

scale_y_log10()

如果你想要关注窗口:

scale_y_continuous(limits=c(-.15,.15), expand=c(0,0))

另外,请考虑添加theme_bw()以获得更清晰的外观