如何在R中修改我的条形图的图例?

时间:2017-07-03 03:39:52

标签: r plot bar-chart legend

在这个条形图中,图例阻挡了它的一部分。如何减小图例的大小?

My code:

`work.gender.marriage.table = table(work$marriage,work$gender)`

enter image description here

`barplot(work.gender.marriage.table,main = "Gender & Marriage",
beside = TRUE,
legend = rownames(work.gender.marriage.table))`

我的数据:

`structure(list(marriage = structure(c(1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L),    class = "factor", .Label = c("D", "M", "NM", "W")), gender = structure(c(2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L), .Label = c("F", "M"), class = "factor"), val = c(12L, 61L, 78L, 56L, 71L, 33L, 86L, 93L)), .Names = c("marriage", "gender", "val"), row.names = c(NA, -8L), class = "data.frame")`

这是使用代码后的图像:

 barplot(work.gender.marriage.table,main = "Gender & Marriage",
 beside = TRUE)

 legend("topright", 
        legend = rownames(work.gender.marriage.table), 
        ncol = 2,
        cex = 0.5)

图像:enter image description here

2 个答案:

答案 0 :(得分:4)

试试这个:

barplot(work.gender.marriage.table,main = "Gender & Marriage",
beside = TRUE)

然后将您的图例添加为:

legend("topright", 
       legend = rownames(work.gender.marriage.table), 
       ncol = 2,
       cex = 0.5)

根据您的数据:

df = structure(list(marriage = structure(c(1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L), class = "factor", .Label = c("D", "M", "NM", "W")), gender = structure(c(2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L), .Label = c("F", "M"), class = "factor"), val = c(12L, 61L, 78L, 56L, 71L, 33L, 86L, 93L)), .Names = c("marriage", "gender", "val"), row.names = c(NA, -8L), class = "data.frame")
df


dfM <- df[which(df$gender=="M"),]
dfF <- df[which(df$gender=="F"),]
dfN <- cbind(dfM[,3], dfF[,3])
colnames(dfN) <- c("M", "F")
rownames(dfN) <- dfM$marriage
dfN

barplot(dfN, beside=T, legend.text = rownames(dfN),
        args.legend = list(x = "topleft", bty="n", cex = 0.7, ncol = 2))

enter image description here

答案 1 :(得分:1)

您也可以使用ggplot2。

library(ggplot2)
ggplot(work.gender.marriage.table) + 
  geom_bar(aes(y = val, x = cat), stat="identity") + facet_grid(. ~ sex)

示例data.frame:

work.gender.marriage.table <- data.frame(cat = c("D", "M", "NM", "W", "D", "M", "NM", "W"),
                                         sex = rep(c("M","F"), each = 4),
                                         val = sample(1:100,8))

enter image description here