【问题标题】:Barplot show only specific names (dates) in x axis条形图在 x 轴上仅显示特定名称(日期)
【发布时间】:2014-11-19 16:22:47
【问题描述】:

我在使用 R 方面非常陌生,但我对条形图中的 x 轴有疑问。

一些例子

 t<-seq(as.Date("2014-04-09"), as.Date("2014-10-09"), by="days")
 c<-sample(0:100,184, rep=TRUE)
 x<-data.frame(t,c)
 rownames(x)<-x[,c(1)]
 x<-subset(x,select=c(2))
 par(las=2)
 barplot(t(x))

如您所见,x 轴上的日期不是很好。我只想显示一些日期,因为 las=1 但方向为 las=2。我试图从日期中创建一个新对象以从中获取名称,但我无法这样做。也许在条形图中或为名称创建一个新对象时有一种方法。

感谢您的帮助

解决方案 1:

plot(t,x$c,type="h")

编辑: plot() 解决方案工作正常。但是如果我需要像新示例中那样堆叠 Bars 怎么办?

 t<-seq(as.Date("2014-04-09"), as.Date("2014-10-09"), by="days")
 c<-sample(0:100,184, rep=TRUE)
 f<-sample(0:100,184, rep=TRUE)
 x<-data.frame(t,c,f)
 rownames(x)<-x[,c(1)]
 x<-subset(x,select=c(2,3))
 par(las=2)
 barplot(t(x))

【问题讨论】:

  • 如果你创建了一个你想要的名字的向量(你还没有完成),然后用""的值散布它们,你可以将它传递给barplot的names.arg参数.您应该意识到您的 t-data-object 与 t-function 不同,并且当您输入 t(x) 时,您正在使用该函数:transpose。

标签: r


【解决方案1】:

欢迎来到 StackOverflow!

这是你想要的吗?

plot(t,x$c,type="h")

(我假设您真的想要将时间序列显示为条形图,这只是一个示例。对于时间序列,您通常会使用type="o"。 )

编辑:要获得 stacked 条形图,您可以执行以下操作 - 首先从x$c 绘制条形的下部,通过ylim 保持足够的垂直空间并使用较粗的线条lwd=3 所以我们实际上可以看到彩色条之间的区别:

plot(t,x$c,type="h",lwd=3,ylim=c(0,max(rowSums(x))))

然后使用lines() 函数添加条形的上部。为此,您需要指定 x 值的向量。由于每个条形图都是垂直的,我们只使用了t 的两个副本。然后,您需要垂直线的下端和上端的 y 值向量。下端是x$c,上端是x$c+x$f。我们需要用NAs 散布x 和y 向量,这样垂直线就不会被对角线连接在一起。我发现使用rbind() 创建三行矩阵最简单,其中最后一行是NA。 (下面,为了清楚起见,我使用as.vector() - 它不是必需的;lines() 会自行将矩阵转换为向量)。最后,我们指定线条的粗细和颜色:

lines(as.vector(rbind(t,t,NA)),
  as.vector(rbind(x$c,x$c+x$f,NA)),
  lwd=3,col="gray")

忠告:给你的数据结构命名与 R 函数冲突不是一个好主意。例如,您有一个日期向量t,但有一个函数t()(它转置矩阵-您实际上使用了那个)。您还有c,它与函数c() 冲突。这会让您和想在这里帮助您的人感到困惑。在time-honored fashion 中调用您的数据结构foobarbaz

【讨论】:

  • 感谢您的解决方案。如果我想生成新示例中的堆叠条,您知道执行相同任务的方法吗?
猜你喜欢
  • 1970-01-01
  • 2018-04-09
  • 1970-01-01
  • 1970-01-01
  • 2021-12-03
  • 1970-01-01
  • 2020-07-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多