初步的:
首先,我很抱歉没有上传我的完整代码,因为它有点长而且我不知道如何在这里上传文件。如果有人知道,请指导我,以便我更新我的问题。
我从这个网站下载了一个excel文件:
datosabiertos.segob.gob.mx/DatosAbiertos/sesnsp_Incidencia_delictiva_Fuero_Federal/IDEFF
我将它保存为 csv,在对数据库进行多次操作后,我得到了这个:
> head(d1217full)
año mes comercio contra la salud narcomenudeo otros otros_lfcd otros_lgs transporte posesion produccion trafico total
1 2012 enero 0.16 0 5.87 0.13 0.02 0.00 0.02 4.34 0.07 0 10.61
2 2012 febrero 0.04 0 5.30 0.13 0.02 0.00 0.00 4.68 0.02 0 10.19
3 2012 marzo 0.07 0 4.81 0.07 0.05 0.00 0.00 6.12 0.07 0 11.21
4 2012 abril 0.40 0 4.48 0.13 0.04 0.00 0.00 4.85 0.00 0 9.90
5 2012 mayo 0.36 0 5.91 0.36 0.07 0.00 0.02 1.95 0.05 0 8.73
6 2012 junio 0.26 0 5.30 0.15 0.22 1.48 0.02 2.17 0.00 0 9.59
申请时str
我们有:
> str(d1217full)
'data.frame': 72 obs. of 13 variables:
$ año : Factor w/ 6 levels "2012","2013",..: 1 1 1 1 1 1 1 1 1 1 ...
$ mes : Factor w/ 12 levels "enero","febrero",..: 1 2 3 4 5 6 7 8 9 10 ...
$ comercio : num 0.16 0.04 0.07 0.4 0.36 0.26 0.09 0.04 0.04 0.05 ...
$ contra la salud: num 0 0 0 0 0 0 0 0 0 0.02 ...
$ narcomenudeo : num 5.87 5.3 4.81 4.48 5.91 5.3 4.27 6.6 6.29 9.84 ...
$ otros : num 0.13 0.13 0.07 0.13 0.36 0.15 0.13 0.09 0.02 0.09 ...
$ otros_lfcd : num 0.02 0.02 0.05 0.04 0.07 0.22 0.11 0.11 0.13 0.11 ...
$ otros_lgs : num 0 0 0 0 0 1.48 4.12 0.2 0.46 0.51 ...
$ transporte : num 0.02 0 0 0 0.02 0.02 0 0.02 0.02 0.02 ...
$ posesion : num 4.34 4.68 6.12 4.85 1.95 2.17 2.11 1.91 1.71 1.73 ...
$ produccion : num 0.07 0.02 0.07 0 0.05 0 0.02 0 0 0 ...
$ trafico : num 0 0 0 0 0 0 0 0 0 0 ...
$ total : num 10.61 10.19 11.21 9.9 8.73 ...
我想要的是能够制作具有以下特征的图表:
- 在 x 轴上记录从 2012/01 到 2017/12 的年份和月份。
- 在y轴上,用不同的线表示贸易变量的数据最多显示为total,即一共11条线,强调“total”
由于我的时间变量是因素,ggplot
它不允许我正确绘制图表。例如,
ggplot(d1217full, aes(año, total)) +
geom_line()
它导致了这个情节,这当然是错误的。
上述,没有考虑到仍然有必要在图中包含其余变量。
我想从头开始创建一个时间向量,将其引入我的数据库,然后制作如下图:
añosgto <- c(seq(as.Date("2012/1/1"), by = "month", length.out = 72))
añosgto <- as.character(añosgto)
temp <- strsplit(añosgto, "-")
temp <- matrix(unlist(temp), ncol=3, byrow=T)
temp <- as.data.frame(temp)
temp <- mutate(temp, año_def=V1, mes_def=V2)
temp <- temp[,-(1:3)]
head(temp)
D1217 <- cbind(d1217full, temp)
D1217 <- select(D1217, -(1:2))
ggplot(D1217, aes(str_c(año_def, "/", str_pad(mes_def, 2, pad = 0)),
total, group=total)) +
geom_line() +
scale_x_discrete(breaks = c("2012/12", "2013/12", "2014/12", "2015/12", "2016/12", "2017/12"))
结果是:
如您所见,我尝试绘制图表但没有成功,因此将不胜感激任何指导。
更新:
在数据库和代码所在的 github 上创建一个存储库。
既然你正在使用它,让我们
dplyr
充分利用它:结果:
细节:
mutate(order = paste0(año, "-",sprintf("%02d",which(meses %in% mes))))
要创建一个对应于 axis 的新列x
,这种方式更容易,因为año
和mes
是因素,如果我们直接使用它会有点复杂。gather(variable, valor, -
有了这一年, -mes, -order)
,我们重新组织结构,对每一列进行观察,然后ggplot
将其视为变量和独立行剩下的代码只是简单的配置绘图,我们配置 , 的值
x
,y
这将是组和定义颜色的人,最后是配置轴标签的垂直方向x
我们定义了
scale_x_discrete(breaks=unique(paste0(as.character(d1217full$año), "-12")))
轴上的削减,x
因此正如您在评论中提到的那样,这些始终是每年的 12 月。