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之后,它工作得非常好!谢谢