2017-07-27 102 views
1

我有一个关于如何转换ggplot2中的y轴的问题。我的情节现在有两条线和一个散点图。对于散点图,我对零附近的区域非常感兴趣。是否有可能扩大0%到5%之间的空间并将空间缩小到20%到30%之间? 我试图用 coord_trans(y =“log10”) 转换成对数形式。但在这种情况下,我有很多负值,所以如果我想使用sqrt或log,负值将被删除。你有什么建议吗?在不改变ggplot2中的原始数据的情况下转换y轴

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

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()) 

但它压缩所述情节什么I I want.Then尝试使用Y,它是相对于该中心= Y^3,但它示出了错误:zero_range(范围)

欣赏!!

enter image description here

+1

您可以先过滤掉所有<0,并排除积极方面的任何异常值,从而为您提供更有用的窗口。 – Mako212

+0

@ Mako212有一个好点。我不确定具有不同范围的两个刻度的轴通常用于数据可视化还是推荐用于数据可视化。考虑将y轴的极限值设置为10%和-10% –

+1

@AlexP我强烈建议避免在同一图表上使用不同的轴比例(假设您正在讨论对红色和蓝色使用不同的范围),因为它暗示了在同一张图表上两组数值之间的假等值/比较。只需将图表限制在+/- 10%就可以了 – Mako212

回答

0

尝试在y值的立方根变换:

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

,或者使用trans_new()定义一个新的转换(如立方根,具有令人愉悦的场所和标签) 。

+0

使用trans_new()将y轴与立方体根压缩图中的X轴与我想要的相反。所以我试图将Y轴转换为立方体,但它只是显示错误信息:缺少TRUE/FALSE值。 –

+0

嗯...哦,是啊,我想因为你正在用百分比工作,根本会做有趣的事情。 。 。在上面的注释中尝试对数模数,并将y轴限制在+/- 10% –

0

一对夫妇的想法:如果你想尝试数转换

scale_y_continuous(expand = c(0,0)) 

,只是做:

您可以删除的情节空的边缘,像这样

scale_y_log10() 

如果你想关注窗口:

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

还可以考虑加入theme_bw()以获得更清晰的外观

相关问题