ggplot时间序列的条形图

mat*_*ath 12 r ggplot2

我正在阅读Hadley Wickham关于ggplot的书,但我很难在条形图中绘制一定的权重.以下是示例数据:

dates <- c("20040101","20050101","20060101")
dates.f <- strptime(dates,format="%Y%m%d")

m <- rbind(c(0.2,0.5,0.15,0.1,0.05),c(0.5,0.1,0.1,0.2,0.1),c(0.2,0.2,0.2,0.2,0.2))
m <- cbind(dates.f,as.data.frame(m))
Run Code Online (Sandbox Code Playgroud)

此data.frame在第一列中具有日期,每行具有相应的权重.我想使用"填充"参数在条形图中绘制每年的权重.

我可以使用以下方法将权重绘制为条形:

p <- ggplot(m,aes(dates.f))
p+geom_bar()
Run Code Online (Sandbox Code Playgroud)

但是,这并不是我想要的.我想在每个酒吧看到每个重量的贡献.而且,我不明白为什么我在x轴上有奇怪的格式,即显示"2004-07"和"2005-07"的原因.

谢谢您的帮助

Ren*_*rop 10

希望这是你正在寻找的:

ggplot2 需要长格式的数据.

require(reshape2)
m_molten <- melt(m, "dates.f")
Run Code Online (Sandbox Code Playgroud)

绘图本身就是通过

ggplot(m_molten, aes(x=dates.f, y=value, fill=variable)) + 
  geom_bar(stat="identity")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

您可以添加position="dodge"geom_bar您并排想要然后侧.

编辑

如果您只想要每年休息:转换m_molten$dates.f为日期.

require(scales)
m_molten$dates.f <- as.Date(m_molten$dates.f)

ggplot(m_molten, aes(x=dates.f, y=value, fill=variable)) + 
  geom_bar(stat="identity") + 
  scale_x_date(labels = date_format("%y"), breaks = date_breaks("year"))
Run Code Online (Sandbox Code Playgroud)

PS:请参阅http://vita.had.co.nz/papers/tidy-data.pdf了解Hadley的整洁数据理念.