使用ggplot创建一个条形图

Bra*_*ani -1 plot r 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)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

Bri*_*ggs 7

这是一个非常简单的ggplot图.原则是将数据融合成长形,然后绘制美学图.然后应用酿酒师调色板只需使用刻度.

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)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

编辑:

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

ggplot(tmp, aes(x=Year, y=Rate, colour=Type)) +
    geom_point() +
    geom_line()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

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

  • @Brani使用`coord_cartesian`代替.但请注意,在严肃的图形专家中,只显示条形图的顶部通常被认为是相当糟糕的做法. (2认同)