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点&这个代码有效。伦敦摇滚,芝加哥摇滚。