这看起来很简单,但我尝试了matplot
,ggplot2
,常规旧plot
的多种变体......我无法做任何我需要的事情。
我有一个巨大的年,月和观察数据框。我将其简化为每月每月的观察次数,见下文。我不确定为什么它会在每个列标题前面加上“X”,但是如果它不会影响代码,那么我现在并不在意。
head(storms)
X Month X1992 X1993 X1994
1 1 1 2 1
2 2 2 4 1
3 3 3 26 10
4 4 4 47 26
5 5 5 969 615
完整(简化)集合是10列年份(1992-2001),每年有12个月/行总计(1992年1月1次风暴,1993年3月26次风暴......)。我只需要将这些全部绘制在120个月的x轴上,即y轴每月的观察数。它可以是一条线或条形或垂直线。我已经看到很多方法在x轴上绘制了20行12个月的绘制线;那是不我想要的。我还需要每12个月标注一次这些年份,但我想我可以解决这个问题。
换句话说(如果以前不是这样,我希望这更清楚):
y轴:风暴次数ylim=c(0-1000)
x轴:10套月(1992年1月至12月,共计120个月)。唯一的标签是年,每12个月一次。
我知道我只是想错了,有人可以直截了当地说出来吗?
(第一篇文章;如果我没有正确格式化或查询,请告诉我。)
答案 0 :(得分:1)
这是你要找的东西吗?如果我没弄错,您可能需要重新排列数据框。您希望使数据框架更长而不是更宽。然后,你可以画一个数字。事情是你有120个月。所以你可能需要考虑情节空间问题。但至少这个例子让你前进。我希望这会对你有所帮助。
library(tidyr)
library(ggplot2)
# Create a sample data
month <- rep(c(1:12), each = 1, times = 2)
nintytwo <- runif(24, 0, 20)
nintythree <- runif(24, 0, 20)
# Crate a data frame
ana <- data.frame(month, nintytwo, nintythree)
# Make the data longer rather than wider.
bob <- gather(ana, year, value, -month)
bob$month <- as.factor(bob$month)
# Draw a firure
cathy <- ggplot(bob, aes(x= year,y = value, fill = month)) + geom_bar(stat="identity", position="dodge")
cathy
答案 1 :(得分:1)
以下是使用基数R的示例:
# create an example data
set.seed(123)
df <- data.frame(Month=1:12)
for(y in 1992:2001){
tmp <- data.frame(X=as.integer(abs(rnorm(12,mean=2,sd=10))))
colnames(tmp) <- paste("X",y,sep="")
df <- cbind(df,tmp)
}
# reshape to long format (one column with n.of storms, and period columns)
long <- reshape(df[,-1], idvar="Month", ids=df$Month,
times=names(df[,-1]), timevar="Year",
varying = list(names(df[,-1])),
direction = "long",v.names="Storms")
# remove the "X" from the year
long$Year <- substr(long$Year,2,nchar(long$Year))
nYears <- length(unique(long$Year))
# plot the line
plot(x=1:nrow(long),y=long$Storms,type="l",
xaxt="n",main="Monthly Storms",
xlab="Period",ylab="Storms",col="RoyalBlue")
# add custom labels
axis(1,at=((1:nYears)*12)-6,labels=unique(long$Year))
# add vertical lines
abline(v=c(0.5,((1:nYears)*12)+0.5),col="Gray80",lty=2)
结果: