操纵羽轴图的x轴标记

时间:2016-01-08 00:47:49

标签: r plot

我在一段时间内有一些风速和风向数据,我需要将它绘制成羽毛图。

在浏览网页一段时间后,我找到了一个人写的函数来绘制适合我的羽毛情节(谢谢你,如果你正在读这个!!)。我现在的问题是我不知道如何操纵x轴的标记。

绘图后,图形如下: enter image description here 现在x轴在这里看起来不太糟糕,但想象我有200个数据点(因而是滴答)而不是10,并且轴刻度可能会有点混乱。所以我希望有人可以帮助我操纵x轴,特别是弄乱蜱虫。

绘制图形的代码是:

stg <- scan(what="", sep="\n")
9/20/15_12:00   2.597058824 157.9411765
9/21/15_0:00    2.177192982 185.1754386
9/21/15_12:00   2.577391304 189.2173913
9/22/15_0:00    1.984955752 237.4336283
9/22/15_12:00   3.993859649 252.6315789
9/23/15_0:00    1.613392857 175.5357143
9/23/15_12:00   3.849166667 216.8333333
9/24/15_0:00    2.138135593 117.0338983
9/24/15_12:00   3.32605042  216.302521
9/25/15_0:00    1.490178571 239.8214286

df <- read.table(textConnection(stg), sep="")
colnames(df) <- c("Time", "wsp", "wdir")

df$PTime <- as.POSIXct(df$Time, format="%m/%d/%y_%H:%M")

feather.plot2 <- function (r, theta, xpos, yref = 0, use.arrows = TRUE, col.refline = "lightgray",
      fp.type = "s", main = "", xlab = "", ylab = "", xlabels = NULL,
      ...)
  {
      if (missing(xpos))
          xpos <- 1:length(theta)
      if (fp.type == "m")
          theta <- 5 * pi/2 - theta
      x <- r * cos(theta)
      y <- r * sin(theta)
      xmult <- diff(range(xpos))/(diff(range(y)) * 2)
      x <- x * xmult
      xlim <- range(c(xpos, x + xpos))
      ylim <- range(c(y, yref))
      oldpin <- par("pin")
      xdiff <- xlim[2] - xlim[1]
      ydiff <- ylim[2] - ylim[1]
      plot(0, xlim = xlim, ylim = ylim, type = "n", main = main,
          xlab = xlab, ylab = ylab, axes = TRUE, xaxt = "n")
      box()
      if (is.null(xlabels))
          axis(1)
      else axis(1, at = xpos, labels = xlabels)
      abline(h = yref, col = col.refline)
      if (use.arrows)
          arrows(xpos, yref, xpos + x, y, length = 0.1, ...)
      else segments(xpos, yref, xpos + x, y, ...)
      par(pin = oldpin)
  }

feather.plot2(df$wsp, df$wdir, fp.type="m", xlabels=df$PTime)

我想要的就是像12点的大刻度和0点的小刻度,如下图所示: enter image description here

虽然我不知道为什么这个数字的标签出现为&#34; Sun - Thu&#34;而不是约会......

这个数字的代码是:

daterange=c(min(df$PTime), max(df$PTime))

plot(x=df$PTime, y=df$wsp, xaxt="n", type="l")
axis.POSIXct(1, at=seq(daterange[1], daterange[2], by="day"))
axis.POSIXct(1, at=seq(daterange[1], daterange[2], by="12 hours"), tcl = -0.3, labels=FALSE )

我尝试在羽毛图上使用这些轴命令,但它没有用。所以我很感激任何帮助/建议。非常感谢你!!

1 个答案:

答案 0 :(得分:1)

我看到两个请求:主要和次要蜱虫;以及更紧凑的轴日期时间注释。步骤1:禁止创建默认轴。第2步:通常的标记是标记主要标记,因此我们将确定标记的正确位置并为标签指定格式说明。第3步:放置次要刻度线。你已经发现了大部分问题,我认为格式问题是最容易解决的问题,所以让我们看看:

plot(x=df$PTime, y=df$wsp, xaxt="n", type="l")
axis.POSIXct(1, at=seq(daterange[1], daterange[2], by="day"), format="%m-%d %H%P",
              lwd.ticks=2)
axis.POSIXct(1, at=seq(daterange[1], daterange[2], by="12 hours"),
              tcl = -0.3, labels=FALSE )

enter image description here

似乎能够成功实现我认为的目标。 by = "day"的使用可能导致翻译人员选择日名的三字母缩写。 (我真的不知道。)