【问题标题】:ggplot2: How to end y-axis on a tick mark?ggplot2:如何在刻度线上结束 y 轴?
【发布时间】:2017-07-18 02:03:31
【问题描述】:

我正在制作几个具有不同轴范围的不同图,所以这个问题不仅仅适用于我在这里展示的代码。我尝试修改刻度线的中断和间隔,但对于某些绘图,y 轴总是在最后一次中断后继续。但对于某些人来说,它就像this 一样工作得很好。

这是我当前的情节和代码。我想用 60 上的刻度线结束 y 轴:

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

【问题讨论】:

  • 中断和限制是独立的,试试scale_y_continuous(breaks = seq(0, 60, 10), limits = c(0, 60))。下次尝试添加一个最小且可重现的示例。

标签: r ggplot2 yaxis


【解决方案1】:

只需将limits = c(0,60)expand = c(0,0) 添加到您的scale_y_continuous

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

【讨论】:

    【解决方案2】:

    您是否要设置 ylim max 以便显示的最后一个中断四舍五入到最接近的 10?以及所有中断都以 10 为增量?

    您可以通过抓取 gg 对象 ggplot_build(gg)$layout$panel_ranges[[1]]$y.range 的 y 范围来获取 ggplot 的当前 ylim,并将 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)))
    

    为限制冗余而编辑,现在代码应该是正确的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-23
      • 2021-08-12
      相关资源
      最近更新 更多