-2

我想将以下 x 轴标签添加到我的条形图中,但不幸的是 R 无法识别字符“!” 并打印点而不是空格:

 I want:                I get:
 !src x.x.x.x           X.src.x.x.x.x
 !TCP                   X.TCP
 !udp && !src x.x.x.x   X.udp.....src.x.x.x.x

此外,a 想增加边距,因为文本很长,并且当将大小设置为 'cex.names=0.6' 时,它就消失了!?

4

2 回答 2

2

我能想到 R 将X.替代!.

  1. 我怀疑您看到的标签是由于 R 读取了您的数据。这些列名在语法上并不是真正有效的,错误的字符已被替换为X.. 这发生在数据导入阶段,所以我假设你没有检查 R 是如何读取你的数据的?,或者
  2. 您有一个向量,并且该向量的名称同样无效,并且 R 已完成转换。

但是,由于您还没有使这个可重现,它可能是任何东西。

要处理上述情况 1,请编辑您的数据文件以包含有效名称或传入check.names = FALSEread.table()用于读取数据的调用。尽管执行后者会使您很难在不完全引用名称的情况下按名称选择变量。

如果您有向量,则可以再次重置名称:

> vec <- 1:5
> names(vec) <- paste0("!",LETTERS[1:5])
> vec
!A !B !C !D !E 
 1  2  3  4  5
> barplot(vec)

另请注意,barplot()有一个names.arg参数可用于将标签传递给它以在每个条形下方绘制。例如:

> barplot(vec, names.arg = paste0("!", letters[1:5]))

这意味着您不需要依赖 R 为您读入/转换的内容,因为您可以准确地告诉它用什么来标记情节。

要增加边距的大小,有几种方法可以指定大小,但我发现根据行数设置它最有用。您可以通过图形参数更改它mar,该参数的默认值c(5,4,4,2) + 0.1分别对应于底部左侧顶部右侧边距。用于par()更改默认值,例如在下面的代码中存储默认值op并指定更大的底部边距

op <- par(mar = c(10,4,4,2) + 0.1)
barplot(vec, names.arg = paste0("!", letters[1:5]), las = 2)
par(op) ## reset

会将条形标签旋转las = 290 度以垂直于轴。

于 2013-01-27T18:38:06.883 回答
0

一种选择是使用ann=F注释并将注释添加到绘图中mtext

 x <- 1:2
 y <- runif(2, 0, 100)
 par(mar=c(4, 4, 2, 4))
 plot(x, y, type="l", xlim=c(0.5, 2.5), ylim=c(-10, 110),
       axes=TRUE, ann=FALSE)

然后添加注释:

 mtext("!udp && !src x.x.x.x ", side=1, line=2)

在此处输入图像描述

编辑这是一个条形图的问题,而不是简单的情节。

正如 Gavin 解决方案中所说,可以设置 names 参数。这里我展示一个例子。

 barplot(VADeaths[1:2,], angle = c(45, 135),
         density = 20, col = "grey",
         names=c("!src x.x.x.x", "!TCP", "!udp && !src x.x.x.x", "UF"),
         horiz=FALSE)

在此处输入图像描述

于 2013-01-27T18:37:33.803 回答