使用ggplot创建一个条形图

时间:2013-01-11 19:20:47

标签: r plot ggplot2

你能帮我用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)

enter image description here

1 个答案:

答案 0 :(得分: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)

enter image description here

编辑:

在评论中,您询问了如何放大条形图,@ joran给出了coord_cartesian将执行此操作的响应。但我想回应他的担忧。不要那样。条形代表它们的面积值;不从0开始意味着你扭曲了分歧。您可以更改表示以显示差异:

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

enter image description here

这使用点和线来表示它们的位置值,当轴不包括0时,它不会失真。