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

+0

고마워요. @ jlhoward. 나는'coord_' 함수에 대해 잊었다. 나는 단지 간격을 바꾸고 싶다. 라벨이 아니다. [here] (http://www.cookbook-r.com/Graphs/Axes_ (ggplot2)/# axis-transformations-log-sqrt-etc)를보고 log2 변환과 log2 변환을 살펴보십시오. 첫 번째 및 세 번째 이미지는 원래 축척의 축을 표시합니다. –

+1

그래서 라벨을 '1000, 2000, 3000'으로 만들고 싶지만 log10 스케일로 간격을 둡니다. 'scale_y_log10 (...) '호출에'breaks = c (100020003000)'을 추가해보십시오. – jlhoward

답변

1

확인을 이제 내가 당신의 질문을 이해하고, 여기에 다른 사람을 도움이 될 것입니다 희망의 대답이다.

먼저 coord_* 함수는 스택 될 수 없으며 서로 오버라이드됩니다. 따라서 사용하는 방식에 따라 coord_flip(...)coord_trans(...)을 무시하고 변환은 표시되지 않습니다.

선형 간격에 따라 눈금 레이블 LOG10 간격을 얻으려면, 이성을 상실 좌표, 당신은 같이 scale_*breaks=... 인수를 사용할 수 있습니다

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