4

我正在尝试在 r 中制作分组条形图,但有些事情我无法弄清楚。这是我到目前为止所拥有的:

在此处输入图像描述

我想:

  1. 从 data.frame(.csv 文件,见下文)创建矩阵
  2. ablines 出现,但不在栏的前面
  3. 分组条形图的标签(11 月、12 月、1 月……-> 参见下面的数据)
  4. 绘图布局如下所示。(我基本上想要情节边框)

理想图

我使用了以下代码:

x<-matrix(nrow=3,ncol=7, data=c(200,227,196,210,279,319,220,126,111,230,196,123,240,106,94,250,154,233,260,226,218))
tiff("p_month_all.tiff", width=600, height=300)
par(mar=c(5,4,0.5,0.5))
a=c("November","December","January","February","March","April","May")
barplot(x, beside=TRUE, ylim=c(0,350),xlab="Month", axes=TRUE,axis.lty=1, ylab="Monthly Precipitation [mm]", col=c("darkblue","dodgerblue3","deepskyblue1"),panel.first= abline(h = c(50,100,150,200,250,300), col = "grey", lty = 2), xaxt="n", yaxt="n")
par(ps=12, cex =1, cex.main=2)
axis(2, c(0,350, c(50, 100, 150, 200, 250, 300)), las=1)
dev.off()

数据集(.csv 文件)如下所示:

Month      Hornberg   Strick   Huetten
November     120       278       234
December     279       156       145
January      328       300       299
February     267       259       234
March        190       201       187
April        150       199       177
May          147       156       160
4

2 回答 2

5

为了清楚起见,我重写了您的代码,以便您可以更轻松地看到问题所在。

xaxt = "n"您正在使用和压制轴yaxt = "n"。我删除了那些行。添加调用以box在绘图周围绘制框。在绘图中添加对grid绘制网格线的调用。我已将行名和列名添加到您的数据矩阵中,以便绘图知道在轴中使用什么。我已经更新了情节边距。我还整理了一些内容,例如用month.name和使用seq.int而不是硬编码序列替换月份名称。

x <- matrix(
  c(
    200, 227, 196, 
    210, 279, 319, 
    220, 126, 111,
    230, 196, 123,
    240, 106, 94,
    250, 154, 233,
    260, 226, 218
  ),
  nrow = 3,
  ncol = 7
)
colnames(x) <- month.name[c(11:12, 1:5)]
rownames(x) <- c("Hornberg", "Strick", "Huetten")


par(mar = c(5, 4, 1.5, 0.5), ps = 12, cex  = 1, cex.main = 2, las = 1)

barplot(
  x, 
  beside      = TRUE, 
  ylim        = c(0,350),
  xlab        = "Month", 
  axes        = TRUE,
  axis.lty    = 1, 
  ylab        = "Monthly Precipitation [mm]",
  col         = c("darkblue", "dodgerblue3", "deepskyblue1"),
  panel.first =  abline(
    h    =  seq.int(50, 300, 50), 
    col  =  "grey", 
    lty  =  2
  )
)
box()
grid()
于 2013-09-05T09:55:46.233 回答
2

所以,首先,查看 ggplot2 文档,这非常好http://docs.ggplot2.org/0.9.3.1/index.html 如果您还没有找到问题的答案,请不要放弃谷歌搜索:)

好的,关于你的问题:

  1. 创建数据

help(read.csv) -> 将您的数据导入名为 x 的 data.frame 为绘图准备数据:

融化您的数据以将其用于绘图

    x<-melt(x)
  1. 使用 Month 变量作为因子并按月排序:

    x$Month=factor(x$Month,level=month.name) 
    x<-x[order(x$Month),]
    
  2. 使用 ggplot2 绘制图表(正如您在此处标记的那样,它在使用中很简单)

        ggplot(x,aes(x=Month,y=value,fill=variable))+geom_bar(stat="bin",position="dodge")+theme_bw()+ylab("Monthly Precipitation [mm]")+xlab("Month")
    

对于颜色,可以使用 scale_fill_brewer() (这里有很棒的教程:http: //www.cookbook-r.com/Graphs/Colors_%28ggplot2%29/

ggplot(x,aes(x=Month,y=value,fill=variable))+geom_bar(stat="bin",position="dodge")+theme_bw()+ylab("Monthly Precipitation [mm]")+xlab("Month")+scale_fill_brewer(palette="Blues")

在此处输入图像描述

于 2013-09-05T10:00:15.390 回答