首页 > 解决方案 > 在特定 y 轴值处绘制更长的刻度线

问题描述

我正在按大小绘制速率与年份的关系。这是我的数据:

size    year    rate    se  lci uci count   pop
<=1 1983    0.53    0.05    0.43    0.64    110 21,998,396
<=1 1984    0.53    0.05    0.44    0.65    114 22,197,735
<=1 1985    0.63    0.06    0.52    0.74    135 22,423,982
<=1 1986    0.62    0.06    0.51    0.74    132 22,644,373
<=1 1987    0.6 0.05    0.5 0.71    131 22,872,669
<=1 1988    0.58    0.05    0.48    0.69    130 23,111,066
<=1 1989    0.63    0.05    0.53    0.74    140 23,349,445
<=1 1990    0.82    0.06    0.7 0.95    185 23,657,474
<=1 1991    0.79    0.06    0.68    0.92    186 23,998,620
<=1 1992    0.94    0.06    0.82    1.07    227 24,368,037
<=1 1993    0.88    0.06    0.77    1.01    214 24,713,120
<=1 1994    1.03    0.07    0.91    1.17    253 25,022,087
<=1 1995    1.17    0.07    1.04    1.32    293 25,339,972
<=1 1996    1.22    0.07    1.09    1.37    310 25,652,964
<=1 1997    1.32    0.07    1.18    1.46    337 25,969,420
<=1 1998    1.47    0.08    1.32    1.62    383 26,263,552
<=1 1999    1.71    0.08    1.56    1.88    453 26,520,657
<=1 2000    1.69    0.08    1.53    1.85    451 26,787,544
<=1 2001    2.11    0.09    1.94    2.29    573 27,018,187
<=1 2002    2.36    0.09    2.18    2.55    643 27,165,850
<=1 2003    2.61    0.1 2.43    2.81    720 27,298,693
<=1 2004    2.91    0.1 2.71    3.12    813 27,458,357
<=1 2005    3.48    0.11    3.27    3.71    984 27,662,860
<=1 2006    3.49    0.11    3.28    3.71    1,010   27,954,662
<=1 2007    4.26    0.12    4.02    4.5 1,234   28,212,877
<=1 2008    4.44    0.12    4.2 4.69    1,303   28,496,587
<=1 2009    4.92    0.13    4.67    5.18    1,465   28,777,105
<=1 2010    4.87    0.13    4.62    5.13    1,462   29,014,912
<=1 2011    5.09    0.13    4.84    5.36    1,570   29,276,092
<=1 2012    5.23    0.13    4.97    5.5 1,612   29,546,129
<=1 2013    5.39    0.13    5.13    5.66    1,684   29,806,864
(1,2]   1983    0.87    0.07    0.75    1.01    190 21,998,396
(1,2]   1984    0.92    0.07    0.8 1.06    202 22,197,735
(1,2]   1985    1.06    0.07    0.93    1.21    235 22,423,982
(1,2]   1986    1   0.07    0.87    1.15    224 22,644,373
(1,2]   1987    1.04    0.07    0.91    1.19    234 22,872,669
(1,2]   1988    1.08    0.07    0.95    1.23    245 23,111,066
(1,2]   1989    1.18    0.07    1.04    1.33    280 23,349,445
(1,2]   1990    1.13    0.07    0.99    1.27    260 23,657,474
(1,2]   1991    1.22    0.07    1.08    1.37    291 23,998,620
(1,2]   1992    1.16    0.07    1.03    1.31    282 24,368,037
(1,2]   1993    1.12    0.07    0.99    1.27    274 24,713,120
(1,2]   1994    1.17    0.07    1.04    1.32    291 25,022,087
(1,2]   1995    1.33    0.07    1.19    1.48    342 25,339,972
(1,2]   1996    1.29    0.07    1.15    1.44    334 25,652,964
(1,2]   1997    1.47    0.08    1.32    1.62    381 25,969,420
(1,2]   1998    1.57    0.08    1.43    1.73    418 26,263,552
(1,2]   1999    1.41    0.07    1.27    1.56    375 26,520,657
(1,2]   2000    1.68    0.08    1.53    1.84    453 26,787,544
(1,2]   2001    1.75    0.08    1.6 1.92    478 27,018,187
(1,2]   2002    2.12    0.09    1.96    2.31    580 27,165,850
(1,2]   2003    2.18    0.09    2.01    2.36    598 27,298,693
(1,2]   2004    2.31    0.09    2.13    2.49    636 27,458,357
(1,2]   2005    2.5 0.09    2.32    2.69    703 27,662,860
(1,2]   2006    2.78    0.1 2.59    2.99    789 27,954,662
(1,2]   2007    3.02    0.1 2.82    3.23    869 28,212,877
(1,2]   2008    3.18    0.11    2.97    3.39    919 28,496,587
(1,2]   2009    3.64    0.11    3.42    3.86    1,064   28,777,105
(1,2]   2010    3.43    0.11    3.22    3.65    1,022   29,014,912
(1,2]   2011    3.87    0.12    3.64    4.1 1,147   29,276,092
(1,2]   2012    3.78    0.11    3.56    4   1,157   29,546,129
(1,2]   2013    3.92    0.12    3.7 4.15    1,204   29,806,864
(2,4]   1983    0.8 0.06    0.68    0.93    177 21,998,396
(2,4]   1984    0.81    0.06    0.69    0.94    179 22,197,735
(2,4]   1985    0.87    0.06    0.75    1   198 22,423,982
(2,4]   1986    0.99    0.07    0.86    1.14    216 22,644,373
(2,4]   1987    0.87    0.06    0.75    1.01    195 22,872,669
(2,4]   1988    0.78    0.06    0.67    0.91    184 23,111,066
(2,4]   1989    0.98    0.07    0.86    1.12    226 23,349,445
(2,4]   1990    1.02    0.07    0.89    1.16    236 23,657,474
(2,4]   1991    1.04    0.07    0.91    1.18    250 23,998,620
(2,4]   1992    1.04    0.07    0.92    1.18    256 24,368,037
(2,4]   1993    1.04    0.07    0.92    1.18    259 24,713,120
(2,4]   1994    1   0.06    0.88    1.14    251 25,022,087
(2,4]   1995    1.02    0.06    0.9 1.15    259 25,339,972
(2,4]   1996    1.22    0.07    1.09    1.37    316 25,652,964
(2,4]   1997    1.2 0.07    1.07    1.35    313 25,969,420
(2,4]   1998    1.26    0.07    1.13    1.41    335 26,263,552
(2,4]   1999    1.34    0.07    1.21    1.49    356 26,520,657
(2,4]   2000    1.38    0.07    1.24    1.53    372 26,787,544
(2,4]   2001    1.49    0.07    1.35    1.65    406 27,018,187
(2,4]   2002    1.75    0.08    1.59    1.91    479 27,165,850
(2,4]   2003    1.82    0.08    1.67    1.99    500 27,298,693
(2,4]   2004    1.95    0.08    1.79    2.13    542 27,458,357
(2,4]   2005    1.8 0.08    1.64    1.96    500 27,662,860
(2,4]   2006    1.95    0.08    1.79    2.12    557 27,954,662
(2,4]   2007    2.07    0.09    1.91    2.25    593 28,212,877
(2,4]   2008    2.31    0.09    2.13    2.49    668 28,496,587
(2,4]   2009    2.58    0.1 2.4 2.78    750 28,777,105
(2,4]   2010    2.52    0.09    2.34    2.71    741 29,014,912
(2,4]   2011    2.62    0.09    2.44    2.82    785 29,276,092
(2,4]   2012    2.83    0.1 2.65    3.03    857 29,546,129
(2,4]   2013    2.7 0.1 2.51    2.89    816 29,806,864
>4  1983    0.22    0.03    0.16    0.3 48  21,998,396
>4  1984    0.24    0.03    0.17    0.31    51  22,197,735
>4  1985    0.18    0.03    0.12    0.24    37  22,423,982
>4  1986    0.25    0.04    0.18    0.33    51  22,644,373
>4  1987    0.24    0.03    0.18    0.32    56  22,872,669
>4  1988    0.17    0.03    0.12    0.23    38  23,111,066
>4  1989    0.24    0.03    0.18    0.32    54  23,349,445
>4  1990    0.19    0.03    0.14    0.25    44  23,657,474
>4  1991    0.22    0.03    0.16    0.28    51  23,998,620
>4  1992    0.23    0.03    0.17    0.3 55  24,368,037
>4  1993    0.25    0.03    0.19    0.32    60  24,713,120
>4  1994    0.34    0.04    0.27    0.42    84  25,022,087
>4  1995    0.38    0.04    0.31    0.47    95  25,339,972
>4  1996    0.38    0.04    0.31    0.47    98  25,652,964
>4  1997    0.35    0.04    0.28    0.43    90  25,969,420
>4  1998    0.36    0.04    0.29    0.44    92  26,263,552
>4  1999    0.44    0.04    0.36    0.53    115 26,520,657
>4  2000    0.4 0.04    0.33    0.49    107 26,787,544
>4  2001    0.51    0.04    0.42    0.6 135 27,018,187
>4  2002    0.58    0.05    0.5 0.68    158 27,165,850
>4  2003    0.53    0.04    0.45    0.63    145 27,298,693
>4  2004    0.55    0.04    0.47    0.65    153 27,458,357
>4  2005    0.73    0.05    0.63    0.84    201 27,662,860
>4  2006    0.69    0.05    0.6 0.8 196 27,954,662
>4  2007    0.67    0.05    0.58    0.78    191 28,212,877
>4  2008    0.72    0.05    0.63    0.83    210 28,496,587
>4  2009    0.79    0.05    0.69    0.9 230 28,777,105
>4  2010    0.95    0.06    0.84    1.07    283 29,014,912
>4  2011    0.88    0.05    0.78    1   267 29,276,092
>4  2012    0.93    0.06    0.83    1.05    283 29,546,129
>4  2013    0.96    0.06    0.85    1.08    295 29,806,864
Unknown 1983    0.74    0.06    0.63    0.88    155 21,998,396
Unknown 1984    0.91    0.07    0.79    1.06    195 22,197,735
Unknown 1985    0.85    0.07    0.72    0.98    178 22,423,982
Unknown 1986    1.02    0.07    0.88    1.16    218 22,644,373
Unknown 1987    0.81    0.06    0.7 0.95    178 22,872,669
Unknown 1988    0.88    0.06    0.76    1.01    196 23,111,066
Unknown 1989    0.82    0.06    0.71    0.95    187 23,349,445
Unknown 1990    1.05    0.07    0.92    1.19    238 23,657,474
Unknown 1991    0.88    0.06    0.76    1.01    205 23,998,620
Unknown 1992    1.07    0.07    0.94    1.21    256 24,368,037
Unknown 1993    0.97    0.06    0.85    1.11    236 24,713,120
Unknown 1994    1.2 0.07    1.06    1.34    294 25,022,087
Unknown 1995    1.08    0.07    0.96    1.22    268 25,339,972
Unknown 1996    1.01    0.06    0.89    1.14    255 25,652,964
Unknown 1997    1.07    0.06    0.95    1.21    274 25,969,420
Unknown 1998    0.94    0.06    0.82    1.06    244 26,263,552
Unknown 1999    0.98    0.06    0.86    1.11    258 26,520,657
Unknown 2000    1.16    0.07    1.04    1.3 308 26,787,544
Unknown 2001    1.02    0.06    0.9 1.15    275 27,018,187
Unknown 2002    0.98    0.06    0.86    1.1 266 27,165,850
Unknown 2003    0.96    0.06    0.85    1.08    264 27,298,693
Unknown 2004    0.74    0.05    0.65    0.85    206 27,458,357
Unknown 2005    0.66    0.05    0.57    0.76    184 27,662,860
Unknown 2006    0.66    0.05    0.57    0.76    185 27,954,662
Unknown 2007    0.64    0.05    0.55    0.74    186 28,212,877
Unknown 2008    0.62    0.05    0.54    0.72    183 28,496,587
Unknown 2009    0.61    0.05    0.53    0.71    185 28,777,105
Unknown 2010    0.52    0.04    0.44    0.61    155 29,014,912
Unknown 2011    0.55    0.04    0.46    0.64    167 29,276,092
Unknown 2012    0.55    0.04    0.47    0.64    173 29,546,129
Unknown 2013    0.47    0.04    0.4 0.55    149 29,806,864

我在下面使用此代码:

library(tidyverse)
library(grid)
library(scales) 

y_breaks <- c(seq(0.01, 0.1, 0.01), seq(0.2, 1, 0.1), seq(2, 10, 1), 20)
y_labels <- y_breaks
y_labels[c(F, rep(T, 8), F, rep(T, 8), F, rep(T, 8), F, F)] <- ''

x_breaks <- seq(1970, 2015, 5)
x_labels <- x_breaks
x_labels[c(F, T)] <- ''

p <- ggplot(data, aes(year, rate)) + geom_point(aes(col = size)) +   
     scale_y_continuous(breaks = y_breaks,
                        labels = y_labels,
                        limits = c(0.01, 20),
                        trans = 'log10',
                        expand = c(0, 0)) +
     scale_x_continuous(name = "Year of Diagnosis", 
                        breaks = x_breaks, 
                        labels = x_labels,
                        limits = c(1970, 2015),
                        expand = c(0, 0)) +
     theme(panel.background = element_blank(),
           axis.line = element_line(colour = "black"),
           panel.grid.minor = element_blank(),
           panel.grid.major = element_blank(),
           )

p

在我得到的图下方: 在此处输入图像描述

y 轴以 log10 比例显示,y 轴标签仅添加到 0.01、0.1、1、10 和 20 的速率值。我希望使这些标签对应的刻度线比其他 y-轴刻度线。

我从 ggplot2 中注意到 Sandy Muspratt 的回答:对于不带标签的刻度线有更短的刻度线。我尝试使用以下代码模仿 Sandy 的方法:

# Edit the plot:
# Change the lengths of the major tick marks

g = ggplotGrob(p)

# Get the x axis
yaxis <- g$grobs[[which(g$layout$name == "axis-l")]]  

# Get the tick marks and tick mark labels   
ticks <- yaxis$children[[2]]

# Get the tick marks
marks = ticks$grobs[[1]]

# Edit the y positions of the end points of the tick marks
# The '6' and the '3' in the code below 
# are the lengths in pts of the major and minor tick marks respectively. 
marks$x = unit.c(unit.c(unit(1, "npc") - unit(6, "pt"), unit(1, "npc"),   
                        rep(unit.c(unit(1, "npc") - unit(3, "pt"), unit(1, "npc")), 8)))

# Put the tick marks back into the plot
ticks$grobs[[1]] = marks
yaxis$children[[2]] = ticks
g$grobs[[which(g$layout$name == "axis-l")]]  = yaxis

# Draw the plot
grid.newpage()
grid.draw(g)

不幸的是,我仍然无法使所需的刻度更长。我想知道如何在 0.01、0.1、1、10 和 20 的 y 轴值处获得更长的刻度。

标签: rggplot2

解决方案


如果您可以避免使用标签,y=20则可以通过添加annotation_logticks(). 我们可以使用 删除标签中的尾随零formatC

ggplot(data, aes(year, rate)) + 
  geom_point(aes(col = size)) +   
  scale_y_log10(name = "Rate", 
                labels = formatC,
                limits = c(0.01, 20),
                expand = c(0, 0)) +
  scale_x_continuous(name = "Year of Diagnosis", 
                     breaks = x_breaks, 
                     labels = x_labels,
                     limits = c(1970, 2015),
                     expand = c(0, 0)) +
  annotation_logticks(sides = "l") + 
  theme(panel.background = element_blank(),
        axis.line = element_line(colour = "black"),
        panel.grid.minor = element_blank(),
        panel.grid.major = element_blank(),
  )

屈服

在此处输入图像描述


推荐阅读