【问题标题】:Manipulating x axis labelling for a feather plot处理羽化图的 x 轴标记
【发布时间】:2016-01-08 00:47:49
【问题描述】:

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

在网上冲浪了一段时间后,我发现有人写了一个函数来绘制对我有用的羽毛图(谢谢你正在阅读这篇文章!!)。我现在的问题是我不知道如何操作 x 轴的标签。

绘制完成后,图如下: 现在 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:00 有较大的刻度,在 0:00 有较小的刻度,如下图所示:

虽然我不知道为什么这个数字的标签是“Sun - Thu”而不是日期......

这个图的代码是:

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 )

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

【问题讨论】:

    标签: r plot


    【解决方案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 )
    

    似乎在我认为你的目标上取得了成功。 by = "day" 的使用可能是导致解释器选择日期名称的三个字母缩写的原因。 (我真的不知道。)

    【讨论】:

    • 谢谢你的回答,虽然我的问题不是线图,而是有feather.plot2函数的羽化图。我想操作那个图上的刻度,但由于我没有编写函数并且不了解函数中发生的大部分内容,所以我不知道我可以在哪里处理这些刻度跨度>
    • 实际上你已经有了越来越小的刻度。我添加了使“更大”刻度线更粗的能力。 “操纵刻度”还有什么意思。这句话不仅向您的听众表明某事不是您所为,而是没有提供积极的指导。
    • 我的意思是我的问题不在于第二行图,而在于第一个羽毛图。第二个图是作为示例发布的,我希望第一个图的刻度看起来像,但是我发布的用于更改刻度的命令在羽化图上不起作用,它是使用我在第一个中发布的函数绘制的代码部分
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 2014-01-25
    • 2012-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多