2017-02-27 2 views
0

축 범위가 다른 여러 개의 다른 플롯을 만들고 있으므로이 질문은 여기에 표시된 코드에만 적용되지 않습니다. 나는 틱 마크의 간격과 간격을 수정하려고 시도했지만, 일부 플롯의 경우 y 축은 마지막 중단 후에 항상 계속됩니다. 그러나 어떤 경우에는 this처럼 잘 작동합니다.ggplot2 : 눈금에 y 축을 끝내는 방법?

다음은 현재 플롯과 코드입니다. 나는 60에 눈금 표시 y 축을 종료하고 싶습니다 :

enter image description here

# Set nucleotide sequence for x-axis labels 
my_labs = c("C", "T", "A", "C", "A", "T", "A", "A", "A", "T", "A", "C", "A", "C", "A", "T", "G", "T", "C", "T", "C", "T", "G", "C", "T", "C", "G", "T", "T", "C", "G", "G", "G", "G", "G", "C", "C", "G", "G", "T", "A", "T", "G", "C", "T", "A", "C", "A", "C", "G", "G", "A", "A", "C", "G", "T", "G", "A", "G", "A", "G", "A", "C", "C", "C", "C", "T", "C", "G", "G", "A", "A", "C", "T", "G", "G", "C", "A", "T", "A", "G", "A", "C", "T", "T", "G", "T", "G", "T", "A", "T", "A", "A", "A", "A", "G", "A", "A", "T") 

# Set color of each nucleotide 
my_cols = c("Black", "Black", "Black", "Black", "Black", "Black", "Black", "Black", "Black", "Black", "Red", "Red", "Red", "Red", "Red", "Red", "Red", "Red", "Red", "Red", "Red", "Red", "Red", "Red", "Red", "Red", "Red", "Red", "Red", "Red", "Black", "Black", "Black", "Black", "Black", "Black", "Black", "Black", "Black", "Black", "Black", "Black", "Black", "Black", "Black", "Black", "Black", "Black", "Black", "Black", "Black", "Black", "Black", "Black", "Black", "Black", "Black", "Black", "Black", "Black", "Black", "Black", "Black", "Black", "Black", "Black", "Black", "Black", "Black", "Black", "Black", "Blue", "Blue", "Blue", "Blue", "Blue", "Blue", "Blue", "Blue", "Blue", "Blue", "Blue", "Blue", "Blue", "Blue", "Blue", "Blue", "Blue", "Blue", "Blue", "Blue", "Black", "Black", "Black", "Black", "Black", "Black", "Black", "Black") 

ggplot(data = miRNA2) + 
    geom_line(mapping = aes(x = Position, y = CPM), colour="red") + 
    scale_y_continuous(breaks = seq(0, 60, 10)) + 
    ylab("Counts per million") + 
    scale_x_continuous(breaks=1:99, labels=my_labs, expand = c(0, 0)) + 
    theme(axis.text.x = element_text(color = my_cols, family = "Courier", size = 6), 
     panel.grid.minor.x=element_blank(), panel.grid.major.x=element_blank(), panel.grid.minor.y=element_blank(), panel.background = element_blank(), 
     axis.line = element_line(colour = "black")) + 
xlab("Supercontig_1.420:40270-40368") + 
    ggtitle("Sar-Mir-Nov-2") + 
    theme(plot.title = element_text(hjust = 0.5)) 
+0

나누기 및 제한은 독립적입니다. 'scale_y_continuous (breaks = seq (0, 60, 10), limits = c (0, 60))'를 사용해보십시오. 다음에 최소한의 재현 가능한 예제를 추가해보십시오. – Axeman

답변

1

을 당신의 scale_y_continuouslimits = c(0,60)expand = c(0,0)을 추가

scale_y_continuous(breaks = seq(0, 60, 10), limits = c(0,60), expand = c(0,0)) 
2

가 설정할나요 ylim 마지막 휴식 시간이 가장 가까운 10으로 반올림되도록 최대 값을 계산 하시겠습니까? 모든 휴식 시간은 10 씩 증가합니까?

gg 개체의 y 범위를 잡아서 ggplot의 현재 ylim을 얻을 수 있습니다. ggplot_build(gg)$layout$panel_ranges[[1]]$y.range, 최대 ylim의 천장을 가장 가까운 10로 가져 와서 휴식 시간을 설정할 수 있습니다. 이 방법을 사용하면 플롯에 따라 한계를 설정하고 동적으로 중단 할 수 있습니다.

gg <- ggplot(data = miRNA2) + 
    geom_line(mapping = aes(x = Position, y = CPM), colour="red") + 
    scale_y_continuous(breaks = seq(0, 60, 10)) + 
    ylab("Counts per million") + 
    scale_x_continuous(breaks=1:99, labels=my_labs, expand = c(0, 0)) + 
    theme(axis.text.x = element_text(color = my_cols, family = "Courier", size = 6), 
    panel.grid.minor.x=element_blank(), panel.grid.major.x=element_blank(), 
    panel.grid.minor.y=element_blank(), panel.background = element_blank(), 
    axis.line = element_line(colour = "black")) + 
    xlab("Supercontig_1.420:40270-40368") + 
    ggtitle("Sar-Mir-Nov-2") + 
    theme(plot.title = element_text(hjust = 0.5)) 


# grab y-range of current gg object 
ggplot_build(gg)$layout$panel_ranges[[1]]$y.range 
gg_ylim_max <- ggplot_build(gg)$layout$panel_ranges[[1]]$y.range[2] 

# decide if you want to ceiling to nearest 10's or 5's 
library(plyr) 
round_any(gg_ylim_max, 10, f = ceiling) # ceiling 10's 
round_any(gg_ylim_max, 5, f = ceiling) # ceiling 5's 

시도해보십시오. 귀하의 데이터가 없어서 작동하지 않는지 확인할 수 없습니다.

gg_ylim_max_round <- round_any(gg_ylim_max, 10, f = ceiling) 
gg + scale_y_continuous(breaks = seq(0, gg_ylim_max_round, 10), limits = c(c(0, gg_ylim_max_round))) 

제한의 중복을 위해 편집되었으므로 코드는 정확해야합니다.

관련 문제