2014-10-03 62 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