R:在一行上绘制多个列
这看起来很简单,但我尝试了多种不同的R:在一行上绘制多个列,r,plot,dataframe,R,Plot,Dataframe,这看起来很简单,但我尝试了多种不同的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
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次风暴…)。我只需要在x轴上画出这些120个月长的图,在y轴上每个月的观测值。它可以是一条线或条线或垂直线。我见过很多方法在x轴上画20条12个月的线;那不是我想要的。我还需要每12个月标记一次年份,但我想我可以在我把这个街区弄清楚后再计算出来
换言之(如果前一种说法不成立,我希望这一点更加明确):
- y轴:#风暴,
ylim=c(0-1000)
- x轴:10组月(1992-2001年1-12月,共120个月)。唯一的标签是年份,当然是每12个月一次
(第一篇文章;如果我没有正确设置格式或查询,请告诉我!)这是您要找的东西吗?如果我没有弄错的话,您可能需要重新排列数据帧。您希望使数据帧更长,而不是更宽。然后,你可以画一个数字,问题是你有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
library(tidyr)
图书馆(GG2)
#创建一个示例数据
月份下面是一个使用base 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)
#创建一个示例数据
种子集(123)
它说我不应该这样做,但是…是的!最后,我脱臼了。我希望我上周问过。谢谢,谢谢!!昨晚,idvar=“Month”
抛出了错误(很抱歉,我无法重现这些错误)idvar=storms$Month
传递时没有错误。我认为他们在做同样的事情?今天早上,在idvar=“Month”
出现了一轮错误之后,我将该区块全部制作成一行(有效),然后再次将其拆分&idvar=“Month”
有效,只是它没有删除列标题前的“X”。不过,我得到了相同的图表。也许其他人有这个问题:再试一次,再试一次!这两种颜色都很好,但这一款较短,看起来更像我所希望的(尽管我的导师会对颜色感到愤怒)。我最初并没有说条形比线条好,因为我的数据只是提供了比线条多一点的信息。如果你想选择自己的颜色,可以使用scale\u fill\u manual()
。例如,你可以做这样的事情<代码>比例填充手册(值=c(“黑色”、“黄色”、“绿色”、“黑色”、“红色”、“蓝色”、“橙色”、“粉色”、“黑色”、“蓝色”、“黄色”、“黑色”))
我花了一段时间才回到这个问题上。谢谢如果其他人有这个问题,这里有一个非常具体的问题:cathy+scale\u fill\u manual(值=c(“黑色”、“黑色”、“黑色”、“黑色”、“黑色”、“黑色”、“黑色”)))
我肯定有一个更简单的方法,但现在是早上5点&这个代码有效。伦敦摇滚,芝加哥摇滚。