R绘制不均匀的轴

时间:2014-06-11 17:59:41

标签: r plot axis

所以我在R中创建了这个简单的折线图,我想知道如何将y轴从图片中的内容更改为:

1000000
100000
10000
1000
100
10
1

并且x轴也只是从1 - 25跨越,包括每个刻度。

我试过了:

plot(dataTable[0:25], axes=FALSE)
axis(1, at=seq(0, 25, 1))
axis(2, at=c(1,10,100,1000,10000,100000,1000000))

其中dataTable如下所示:

1      2      3      4      5      6      7      8      9      10      11 
621266 496647 436229 394595 353249 305882 253983 199455 147380 102872 67255 
12     13     14     15     16     17     18     19     20     21     22 
41934  24506  13778  7179   3646   1778   816    436    217    114    74 
23     24     25     
49     44     26 

但我一直在

Error in xy.coords(x, y, xlabel, ylabel, log) : 
  'x' and 'y' lengths differ

任何帮助?

R Output:

2 个答案:

答案 0 :(得分:5)

阅读?par?axis。需要抑制x轴构造,然后稍微缩小轴标签的大小,使它们适合刻度线之间的可用空间。并且需要指定log="y"

d2 <- scan()
621266 496647 436229 394595 353249 305882 253983 199455 147380 102872 67255 41934  24506  13778  7179   3646   1778   816    436    217    114    74 49     44     26

编辑提供所请求的缩放,我最初误解了

 png()
plot(d2, type ="b", log="y",axes=FALSE, ylim=c(1,10^7))
axis(2, at=10^(0:6), labels=formatC(10^(0:6),format="f", digits=0),
     cex.axis=0.8,las=2 )
axis(1, at=1:25, cex.axis=.6)
dev.off()

enter image description here

答案 1 :(得分:0)

这是一个ggplot2解决方案。试图重现你的情节风格。据我所知,如果不编写自己的自定义绘图功能,或者在某个包中使用指定的日志绘图功能,就无法在基本绘图中执行所需的操作。

library(ggplot2)
df = data.frame(x = 1:25, y = c(621266,496647,436229,394595,353249,305882,253983,199455,147380,102872,67255,41934,24506,13778,7179,3646,1778,816,436,217,114,74,49,44,26))
b = c(1, 10, 100, 1000, 10000, 100000, 1000000)
options(scipen=999)
ggplot(data = df, aes(x = x, y = y)) +
    geom_line(col = "red", size = 1) +
    geom_point(col = "red", shape = 1, size = 4) +
    scale_y_log10(labels = b, breaks = b) + 
    xlab("Coverage Threshold") +
    ylab("# Covered STRs")+ 
    theme_bw() +
    theme(panel.grid.minor=element_blank(), panel.grid.major=element_blank())

ggplot2 example