R:对应于15年12个月的数据时间序列的条形图

R:对应于15年12个月的数据时间序列的条形图,r,ggplot2,bar-chart,R,Ggplot2,Bar Chart,我有一个数据集,看起来像下面这个 month Yi Yi+1 1 0.014310185 13.43838262 2 0.014310185 15.7792948 3 0.176113783 16.14479846 4 3.143663699 16.54060078 5 3.755478277 16.75810501 6 3.767263653 17.03156884 7 3.767263653 17.03156884 8 3.829219647 1

我有一个数据集,看起来像下面这个

month   Yi      Yi+1
1   0.014310185 13.43838262
2   0.014310185 15.7792948
3   0.176113783 16.14479846
4   3.143663699 16.54060078
5   3.755478277 16.75810501
6   3.767263653 17.03156884
7   3.767263653 17.03156884
8   3.829219647 17.03156884
9   4.375269901 17.78482322
10  8.707536696 18.47995179
11  10.28741362 21.33942187
12  10.66218286 21.82637774
我有15列Y(Yi到Yi+14)。例如,列Yi对应于一年中12个月的降水量Yi。我必须在x轴上并排绘制所有年份(包括月份)的降水量。最后,我必须得到这样的东西:
![在此处输入图像描述][1]


我已经尝试了
melt
group\u by
功能,按照以下命令重塑我的数据框:

df  <- read_excel("df.xls", col_names = FALSE, skip = 1)
colnames(df) <- c("month", "Yi", paste0("Yi+", 1:14)

df.melt <- melt(tab.df, id = c("month", "Yi", paste0("Yi+", 1:14))

bar <- group_by(df.melt, aes(x = 1:length(value), y = value, fill=factor(month))) +
geom_bar(position="dodge", stat="identity"))

ggplot(bar, aes(x=variable, y=mean, fill=factor(month)))

df您可以熔化数据帧并按顺序绘制值
1:180
。然后,您可以将自定义标签指定给x轴以表示年份

library(reshape2)
library(ggplot2)

# Create example df with random values
df <- data.frame(month = 1:12, matrix(rnorm(12 * 15), 12))
colnames(df) <- c("month", "Yi","Yi+1", "Yi+2", "Yi+3", "Yi+4", "Yi+5","Yi+6",  "Yi+7", "Yi+8", "Yi+9", "Yi+10","Yi+11","Yi+12","Yi+13","Yi+14")

df_m <- melt(df, "month")

# Prepare labels (at each 6 month for 15 years)
x_labs <- c("Yi","Yi+1", "Yi+2", "Yi+3", "Yi+4", "Yi+5","Yi+6", "Yi+7",
            "Yi+8", "Yi+9", "Yi+10","Yi+11","Yi+12","Yi+13","Yi+14")

ggplot(df_m, aes(x = 1:length(value), y = value, fill=factor(month))) +
    geom_bar(position="dodge", stat="identity") +
    # add custom labels at each 6-th month
    scale_x_continuous(labels = x_labs, breaks = seq(6, 15 * 12 - 6, by = 12)) +
    xlab("year???")
library(重塑2)
图书馆(GG2)
#使用随机值创建示例df

df一种替代方法是每年使用
geom_col
和facet

library(data.table) # for melt
library(ggplot2)

# Took the data example from @Istrel
set.seed(2018)
df <- data.frame(month = 1:12, matrix(abs(rnorm(12 * 15)), nrow = 12))
colnames(df) <- c("month", "Yi", paste0("Yi+", 1:14))
setDT(df) # just to be sure, convert to data.table; use setDF(df) to switch back
df_m <- data.table::melt(df, "month")

ggplot(data = df_m,
       aes(x = month, 
           y = abs(value),
           fill = as.factor(month))) +
  geom_col() +
  facet_grid(cols = vars(variable),
             space = "free_x",
             scales = "free_x",
             switch = "x") +
  # Some graph adjustments:
  scale_y_continuous(expand = c(0, 0)) +  # remove space between plot area and x axis
  labs(x = "Year", y = "Climate variable") +
  scale_fill_discrete(name = "Months") + # legend title
  theme(
    axis.text.x = element_blank(),
    axis.ticks.x = element_blank(),
    panel.grid = element_blank(),
    panel.spacing = unit(0.1, "cm")  # adjust spacing between facets
  )
library(data.table)#用于熔化
图书馆(GG2)
#以@Istrel中的数据示例为例
种子集(2018)

df张贴的问题似乎根本不包括解决问题的任何尝试。StackOverflow希望您首先尝试解决自己的问题,因为您的尝试有助于我们更好地了解您的需求。请编辑问题以显示您尝试过的内容,以便在一个最小、完整且可验证的示例中说明您遇到的特定问题。有关更多信息,请参阅和。我根据您的评论编辑了我的问题!谢谢
melt
group\U by
不是基本的R功能。请包括所有
行。谢谢@Istrel。问题是我无法安装包
reformae2
,因为无法安装其相关包
stringr
。当我使用
melt(df,“month”)
时,我可以只安装
restrape
并使用
restrape
,出现此错误:
匹配错误。名称(clab,name(xi)):名称与以前的名称不匹配
抱歉,无法重现您的错误。我已经尝试了
reshepe
软件包,代码运行良好。谢谢。我尝试了你的随机值,你的脚本工作得很好。但是对于我的data.frame,有一个错误:
match.names(clab,names(xi)):名称与以前的名称不匹配
你能发布
str(df)
输出吗?
Classes的data.table'和'data.frame':12 obs。共16个变量:$Yi:num 0.0143 0.0143…$Yi+1:num 13.4 15.8Yi+2:数字22.7 23.2..$Yi+3:num 36.5 37.6Yi+4:num 45.8 45.9Yi+5:num 49.2 49.3Yi+6:num 51.5 51.5..$Yi+7:num 57.5 57.6Yi+8:num 74.6 75.6Yi+9:num 77.2 77.5..$Yi+10:num87.187.4Yi+11:num 89.4 89.7…$Yi+12:num 91.8 91.8..$Yi+13:num 96.1 96.7..$Yi+14:num 99.399.3..$月份:数字1234567…-attr(*,“.internal.selfref”)=
谢谢Valentin。当我运行您的脚本时,它会给出以下错误:
error in value[[3L]](cond):data.table中的melt generic已传递tbl_df(不是data.table),但未安装REPLACE2包来处理此类型。请安装重塑2并重试,或者将data.table传递给melt。>你好。使用
setDT(您的\u tbl\u df)
将其切换到data.table,如果需要还原,请使用
setDF
功能。我还更新了我的答案。谢谢,错误
数据。表
已修复。但是,仍然存在这个问题:
loadNamespace(i,c(lib.loc,.libpath()),versionCheck=vI[[i]])中的错误:没有名为“stringr”的包。
。当我尝试安装
stringr
时,我发现以下错误:
library.dynam(lib,package,package.lib)中的错误:未找到共享对象“stringi.so”错误:包“stringr”的延迟加载失败*删除安装中的“/Library/Frameworks/R.framework/Versions/3.3/Resources/Library/stringr”警告。包:包“stringr”的安装具有非零退出状态安装
stringr
install.packages(“stringi”,dependencies=TRUE,install\u opts=c('--no lock'))install.packages(“stringr”,dependencies=TRUE,install\u opts=c('--no lock'))
安装stringr之后,它工作得非常好!谢谢