r从Excel CSV文件中分组条形图

sam*_*jam 4 r matrix bar-chart ggplot2 dataframe

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

在此输入图像描述

我想要:

  1. 从data.frame创建矩阵(.csv文件,见下文)
  2. 要出现的下划线,但不是在酒吧前面
  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()
Run Code Online (Sandbox Code Playgroud)

数据集(.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
Run Code Online (Sandbox Code Playgroud)

Ric*_*ton 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()
Run Code Online (Sandbox Code Playgroud)