2014-10-03 141 views
0

我想变换坐标(而不是比例/值),以便y变量(翻转到x)间隔更好。我认为这将是coord_trans(y="log10")coord_trans(y="log2")什么的,但这似乎并不奏效。ggplot翻转和变换坐标

library(ggplot2) 
library(scales) 

dat <- structure(list(median=c(2893, 0, 907.5, 1315, 0, 84, 98, 953, 
           0, 0, 1349, 17.5, 48.5, 7, 28, 18, 14, 37.5, 0, 383, 220.5, 49, 
           86.5, 816.5, 38, 41, 38, 1302, 14, 0, 1304, 754, 424.5, 0, 35.5, 
           28, 32, 0, 39), 
         name = c("name 1", "name 2", "name 3", "name 4", 
           "name 5", "name 6", "name 7", "name 8", "name 9", "name 10", 
           "name 11", "name 12", "name 13", "name 14", "name 15", "name 16", 
           "name 17", "name 18", "name 19", "name 20", "name 21", "name 22", 
           "name 23", "name 24", "name 25", "name 26", "name 27", "name 28", 
           "name 29", "name 30", "name 31", "name 32", "name 33", "name 34", 
           "name 35", "name 36", "name 37", "name 38", "name 39")), 
       .Names = c("median", "name"), row.names = c(NA, -39L), class = "data.frame") 


dat = transform(dat, name = reorder(name, median)) 

ggplot(dat) + 
    geom_point(aes(y=median, x=name)) + 
    #coord_trans(y="log10") + 
    coord_flip() + 
    theme_bw() + 
    theme(
    panel.grid.major = element_blank(), 
    panel.grid.minor = element_blank(), 
    panel.border = element_blank(), 
    axis.line = element_line(color = 'black'), 
    panel.background = element_blank(), 
    axis.title.y = element_blank()) 

我不想重新调整值:

ggplot(dat) + 
    geom_point(aes(y=median, x=name)) + 
    scale_y_log10() + 
    coord_flip() + 
    theme_bw() + 
    theme(
    panel.grid.major = element_blank(), 
    panel.grid.minor = element_blank(), 
    panel.border = element_blank(), 
    axis.line = element_line(color = 'black'), 
    panel.background = element_blank(), 
    axis.title.y = element_blank()) 
+1

'coord_flip(... )'和'coord_trans(...)'都是'coord_ *'函数,所以它们不能被“堆叠” - 它们互相覆盖。你使用它的方式,'coord_flip(...)'覆盖'coord_trans(...)',这就是为什么你看不到效果。如果反转代码行,则会得到log10转换,但不会翻转。你为什么不**要重新定标 - 它能完成同样的事情? – jlhoward 2014-10-03 18:14:07

+0

谢谢,@jlhoward。我忘了关于'coord_'的功能。我只想改变间距,而不是标签。看看[这里](http://www.cookbook-r.com/Graphs/Axes_(ggplot2)/#axis-transformations-log-sqrt-etc),看看log2缩放与log2转换。第一张和第三张图像以原始比例显示轴。 – 2014-10-03 18:29:37

+1

所以你想要的标签是'1000,2000,3000',但间隔在log10的规模?尝试添加'breaks = c(1000,2000,3000)'调用'scale_y_log10(...)' – jlhoward 2014-10-03 18:50:11

回答

1

行,所以现在我明白你的问题,这里的,希望它会帮助别人的答案。

首先,coord_*函数不能堆叠 - 它们相互覆盖。因此,你使用它的方式,coord_flip(...)覆盖coord_trans(...),你看不到任何转换。

要获得日志10间隔有刻度标记基于线性间距,与翻转坐标,你可以使用breaks=...参数scale_*,如:

ggplot(dat) + 
    geom_point(aes(y=median, x=name)) + 
    scale_y_log10(breaks=1000*(1:3)) + # note use of breaks=... 
    coord_flip() + 
    theme_bw() + 
    theme(
    panel.grid.major = element_blank(), 
    panel.grid.minor = element_blank(), 
    panel.border = element_blank(), 
    axis.line = element_line(color = 'black'), 
    panel.background = element_blank(), 
    axis.title.y = element_blank()) 

+1

您将如何处理秤的“logit”情况?这种方法,不幸的是不起作用。 – Zelazny7 2016-06-20 21:51:44