-1

你能帮我使用 ggplot2 包和mat矩阵中的数据创建以下条形图吗?

mat <- matrix(c(70.93,78.58,78.72,69.24,62.53,43.85,83.49,70.00,78.30,78.11,71.16,63.82,47.37,89.87),ncol=2)
colnames(mat) <- c("Crude","Standardized")
rownames(mat) <- 2006:2012

library(gplots)
library(RColorBrewer)
my_palette <- palette(brewer.pal(7,"Set1"))

barplot2(mat,
main="Crude and Standardized Rates",
xlab="Type", ylab="Rate", xlim=c(0,20), ylim=c(40,100),
col=my_palette, beside=TRUE, plot.grid = TRUE, xpd=FALSE)
legend(locator(1), rownames(mat), title ="Year",fill=my_palette)

在此处输入图像描述

4

1 回答 1

7

这是一个非常简单的 ggplot 图。其原理是将数据融合成长格式,然后进行美学映射。应用 brewer 调色板只是使用比例的问题。

library("reshape2")

tmp <- melt(mat)
names(tmp) <- c("Year", "Type", "Rate")

library("ggplot2")

ggplot(tmp, aes(x=Type, y=Rate, fill=factor(Year))) +
    geom_bar(stat="identity", position="dodge", colour="black") +
    scale_fill_brewer(type="qual", palette=1)

在此处输入图像描述

编辑:

在评论中,您询问了如何放大条形图,@joran 给出了coord_cartesian可以做到这一点的回应。但我想回应他的担忧。不要那样做。条形按面积表示其价值;不是从 0 开始意味着你在扭曲差异。您可以更改表示以显示差异:

ggplot(tmp, aes(x=Year, y=Rate, colour=Type)) +
    geom_point() +
    geom_line()

在此处输入图像描述

这使用点和线来表示它们的值,当轴不包含 0 时不会扭曲。

于 2013-01-11T19:31:44.563 回答