R图的图例名称太长

时间:2017-10-22 20:57:50

标签: r bar-chart legend rowname

在一个条形图中,我正在尝试插入一个包含长rowname的图例,该图例会被切断。我如何将rowname分成2行呢?

我知道我也可以改变rowname,但希望还有另一种方法。

    datab <- c(1,8.7, 19, 16, 13.2, 8.7, 67, 66)
    matrix.b <- matrix(datab, nrow=4, ncol=2, byrow=TRUE)
    colnames(matrix.b) <- c("Hazelnut", "Caneberry")
    rownames(matrix.b) <- c("Parasitism", "Predation", "Undeveloped wasp", 
    "Undamaged")
    par(mar=c(5.1, 4.1, 4.1, 7.1), xpd=TRUE)
    barplot(matrix.b, col=heat.colors(length(rownames(matrix.b))), width=2, 
    cex=1.2, ylab="%", cex.axis=1.2, cex.lab=1.2)
    legend("topright",inset=c(-0.5,0), 
    fill=heat.colors(length(rownames(matrix.b))), legend=rownames(matrix.b))

enter image description here

1 个答案:

答案 0 :(得分:0)

增加地块边际

如果您不想更改rownames,您可以更改绘图边距或图例的位置。至于前者,以下增加了正确的情节边际

par(mar=c(5.1, 4.1, 4.1, 12), xpd=TRUE)

多行图例条目

您还可以拆分图例条目,并在每个单词后添加换行符

# Introduce newline (\n) between words
rownames(matrix.b) <- sapply(rownames(matrix.b), function(x) {
    words <- unlist(strsplit(x, " "));
    if (length(words) > 1) paste(words, collapse = "\n") else words;
})
# Plot
par(mar=c(5.1, 4.1, 4.1, 12), xpd=TRUE)
barplot(matrix.b, col=heat.colors(length(rownames(matrix.b))), width=2, cex=1.2, ylab="%", cex.axis=1.2, cex.lab=1.2)
legend("topright",inset=c(-0.5,0), fill=heat.colors(length(rownames(matrix.b))), legend=rownames(matrix.b))

enter image description here