【问题标题】:R - Custom X axis using CSV dataR - 使用 CSV 数据的自定义 X 轴
【发布时间】:2015-10-09 17:56:49
【问题描述】:

我正在使用 RStudio,并且有一个关于自定义 x 轴的问题。在我当前的项目中,我想在 X 轴上绘制日期,在 Y 轴上绘制此特定操作的评分。

tree <- read.csv(file="D:/R_Work/average_grade.csv",head=TRUE,sep=",")

plot(tree$NUM,tree$AVG,
     main="YSLOW Grades",
     xlab="Date",
     ylab="Grade",
     xaxt="n",
     yaxt="n",
     ylim = c(5,0))


axis(1, at = seq(tree$DATE), las=2)
axis(2, at=1:5, labels=LETTERS[1:5])

正如您从我的代码中看到的那样,我正在尝试做的是绘制 NUM vs AVG,NUM 是分配给操作的数字。但是,我希望 NUM 在我的实际图形 x 轴上显示为 DATE。因此,它将显示相应的日期,而不是数字。我试图用我的倒数第二行代码来做到这一点,但它对我不起作用(不足为奇,只是在测试任何东西)。 DATE 与包含 7.10.14 等数据的 CSV 文件相关联。

我之所以不简单地绘制 DATE 与 AVG 的原因是,当我绘制日期时,会垂直于我的数据点绘制奇怪的水平线。我认为有一个简单的解决方法,但我自己无法解决。

图表(带有奇怪的线条):

如果有人知道如何编辑我的 x 轴以与我的 CSV 数据点重合,或者如何删除这些线,以便我可以轻松地绘制一个日期,就像图像显示的那样,那就太好了。

谢谢!

数据:

DATE、AVG、NUM

7.13.14,2,1

7.14.9,2,2

7.15.10,2,3

【问题讨论】:

  • 如果是大型数据集,您能否使用dput(tree)dput(head(tree)) 添加数据样本?
  • 我们是否应该假设 7.13.14 是 2014 年 7 月 13 日? 7.14.9 是 2009 年 7 月 14 日; 7.15.10 是 2010 年 7 月 15 日?我不确定我是否理解日期格式。
  • @Benjamin 格式为 Month.Day.Hour
  • @NickKennedy 嗨尼克,我在我的问题下方发布了我的 CSV 文件。希望这会有所帮助。最初我只有 DATE 和 AVG,但从图中可以看出,它以一种奇怪的方式绘制日期。通过添加“NUM”,我的整个想法是将它们用作 X 坐标以使其正确绘制图形,然后简单地使用 DATE 作为查看者在轴上看到的内容。如果您有任何想法,请告诉我。

标签: r csv plot


【解决方案1】:

这会帮助你到达你想去的地方吗?

tree <- "DATE,AVG,NUM
7.13.14,2,1
7.14.9,2,2
7.16.10,2,3"

tree <- read.csv(textConnection(tree),
              stringsAsFactors=FALSE)

tree$DATE_NEW <- as.POSIXct(paste0("2015.", tree$DATE),
                         format = "%Y.%m.%d.%H")

plot(as.numeric(factor(tree$DATE_NEW)),
     tree$AVG,
     main="YSLOW Grades",
     xlab="Date",
     ylab="Grade",
     xaxt="n",
     yaxt="n",
     ylim = c(5,0))

axis(1, at = factor(tree$DATE_NEW), 
     labels = format(tree$DATE_NEW,
                     format = "%b %d %H:%S"))
axis(2, at=1:5, labels=LETTERS[1:5])

编辑:

最大的变化是我正在绘制as.numeric(factor(tree$DATE_NEW))。当你在 x 轴上绘制一个因子时,R 默认会尝试绘制一个箱线图。由于每个因子组只有一个观察值,因此您会看到一条线(四分位数和中位数都相同)。

为了得到您想要的图,我们需要做的是绘制因子的基础数值。这有点难看,但现在点都均匀分布(忽略它们之间经过的时间)并且仍然显示点而不是线。

【讨论】:

  • 感谢 Ben,这对我有很大帮助,这正是我想要的。是否可以保持像 7.13.14 这样的格式而不包括月份?
  • 请参阅?strptime,了解使用日期/时间对象格式化外观的多种方式。模式是format(DATE, format = [your desired format string]。在示例中,%b %d %H:%S 给出月、日、小时和秒。查看?strptime 你会发现%d %H:%S 只会给出天数、小时数和秒数。这是一个非常有用的帮助文件。
  • 很抱歉再次打扰您。我开始意识到,当我绘制许多不同的值时,我的 X 轴间距变得很差。例如,如果我在一天之内有 3 个日期,那么一周后的一个,这三个日期将聚集在一起,第四个日期将在 X 轴上更远。有什么方法可以让所有日期的间隔均匀,无论它们的价值如何?我试过研究 strptime 但没有运气。
  • 你需要改变你的 x, 变量的类。如果您将它从日期转换为因子,它应该按照您想要的方式绘制。
  • 保理确实有帮助,因为它确实可以排除我的所有观点。然而,现在我在我的图表中得到了像以前一样的那些线,而且日期格式现在有点奇怪。不知道如何使这项工作 100%。除了使用这个日期对象,有没有一种简单的方法来读取我已经包含日期的 CSV 文件,并让 X 轴简单地读取和打印这些日期?基本上,无论 CSV 的日期列中是什么,都让 x 轴打印出相应的等级。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-27
  • 2021-05-18
  • 2012-01-18
  • 2013-02-24
  • 2014-05-06
  • 2013-07-19
  • 2019-11-15
相关资源
最近更新 更多