2010-11-08 54 views
15

我在R中创建了一个直方图,它显示了矢量中几个事件的频率。每个事件由[1,9]范围内的整数表示。我在图表的垂直下方显示每个计数的标签。这里的代码:如何让我的垂直标签适合我的绘图窗口?

hist(vector, axes = FALSE, breaks = chartBreaks) 
axis(1, at = tickMarks, labels = eventTypes, las = 2, tick = FALSE) 

不幸的是,标签太长,所以他们被窗口的底部切断。我如何让它们可见?我甚至使用正确的图表吗?

回答

8

这听起来不像直方图的工作 - 事件不是一个连续变量。 barplot或dotplot可能更适合。

某些伪数据

set.seed(123) 
vec <- sample(1:9, 100, replace = TRUE) 
vec <- factor(vec, labels = paste("My long event name", 1:9)) 

甲barplot经由barplot()函数产生 - 我们提供它使用用于方便table()函数的每个事件的计数。在这里,我们需要旋转使用las = 2标签和

## lots of extra space in the margin for side 1 
op <- par(mar = c(10,4,4,2) + 0.1) 
barplot(table(vec), las = 2) 
par(op) ## reset 

点阵图通过功能dotchart()生产并具有分选出来的情节利润率为我们

dotchart(table(vec)) 
的更加方便的保证金创建标签的一些额外的空间

dotplot比barplot的优势在于使用更少的墨水来显示相同​​的信息,并关注组间计数的差异而不是计数的大小。

请注意我如何将数据设置为一个因子。这使我们可以将事件标签存储为该因子的标签 - 从而自动执行绘图中轴的标注。这也是存储数据的一种很自然的方式,就像我理解你拥有的那样。

+0

如果有人使用hist(),那么减小标签大小的方法是使用cex.axis。它看起来与barplot使用相同的绘图参数,但在测试回答后,它看起来是cex.names,因为在barplot()中“数字”标签似乎与“字符”不同。 – 2010-11-09 02:37:50

+0

条形标签和计数轴标签是通过对'axis()'的两次单独调用绘制的。当在外部调用par()时设置'cex.axis'会改变这两个标签,因为'cex.axis'和'cex.name'采用'par(“cex.axis”)'作为默认值。如果你向'barplot()'调用'cex.axis',你并没有改变'par(“cex.axis”)',因此标签不会改变大小。在'hist()'中,您正在绘制两个同时绘制的数字轴,因此都受到'cex.axis'的影响。 – 2010-11-09 09:00:36

9

查看help(par),特别是mar(保证金)和oma(对于外部保证金)。 这可能是这么简单

par(mar=c(5,3,1,1)) # extra large bottom margin 
hist(vector, axes = FALSE, breaks = chartBreaks) 
axis(1, at = tickMarks, labels = eventTypes, las = 2, tick = FALSE) 
+0

我知道有这个一个简单的解释,但无论我做什么用月,OMA,或OMI,没有什么变化。我试着用par()设置它并将它传递给hist();没有骰子。 – 2010-11-08 22:29:36

+4

尝试'par(mar = c(9,4,4,2)+ 0.1)'---第1面的默认边距是5,所以Dirk的示例实际上并没有为第1面创建比正常大的东西---它比正常情况下减少了-4。你只能通过调用'par()'来设置'mar','oma'等。 – 2010-11-08 23:21:57

0

也许添加\ n为进你的标签,这样他们就会换到2号线?这不是最佳的,但它可能工作。

0

你可能想看看这个post从交叉验证