大家好,我正在格子图中工作,一切正常,但我对传奇有些麻烦.我正在使用xyplot(),它的工作原理很棒.我的数据框是NM(我dput()在最后部分添加了版本):
AMes A2009 A2010 A2011 A2012 A2013 A2014
1 enero 710004.3 1458624.4 6229245 4407423 3006568 1749746
2 febrero 889398.1 942099.6 5553163 4248144 2615730 1902865
3 marzo 1114883.1 1210951.2 6372920 3537103 2833299 1605746
4 abril 1419242.1 1151423.9 6755055 3500596 3438797 2116088
5 mayo 1585857.2 1598355.1 7119008 4049074 3224926 NA
6 junio 1010455.6 1370856.8 7585412 3279869 2794030 NA
7 julio 1292333.4 1420547.4 7258676 3420974 3003458 NA
8 agosto 1032443.3 2048291.1 7250944 2602310 2486932 NA
9 septiembre 1133260.1 3043637.6 6227707 2225635 2515076 NA
10 octubre 1229593.8 3669634.1 5795989 2853467 2674568 NA
11 noviembre 1074569.6 3641665.2 4015226 2830482 1731063 NA
12 diciembre 1370905.6 6780879.4 5391953 2823591 2054560 NA
Run Code Online (Sandbox Code Playgroud)
我使用下一个代码来生成下一个图:
library(lattice)
library(latticeExtra)
parSettings <- list(layout.widths=list(left.padding=8,rigth.padding=20))
comma_formatter <- function (lim, logsc = FALSE, at = NULL, ...) {
ans <- yscale.components.default(lim = lim, logsc = logsc, at = at, ...)
xxPrime <- as.numeric(ans$left$labels$labels)
ans$left$labels$labels <- formatC(xxPrime, format = "fg", big.mark = ",")
ans
}
D <- xyplot(A2009+A2010+A2011+A2012+A2013+A2014 ~ factor(NM$AMes,unique(NM$AMes)), NM, type = c("p","l"), yscale.components = comma_formatter,auto.key=list(space="right",lines=TRUE,points=T), par.settings = parSettings,layout=c(1,1),aspect=0.6,main = "Delta Index",lwd=2,pch=16,cex.axis=4,scales=list(x=list(rot=90,font=2,cex=0.8),y=list(font=2),tick.number=9))
D
Run Code Online (Sandbox Code Playgroud)
结果是下一个图:

我想在线条中间的这个情节点的传说,但没有分开,因为yiu可以看到.另外,我想获得我在图表中用于图例中的线条和点的相同样式.另外我不知道是否可以移除顶部x轴和右y轴或至少移除此轴上的断点.dput()我的数据框的版本是下一个:
structure(list(AMes = c("enero", "febrero", "marzo", "abril",
"mayo", "junio", "julio", "agosto", "septiembre", "octubre",
"noviembre", "diciembre"), A2009 = c(710004.35, 889398.08, 1114883.11,
1419242.11, 1585857.22, 1010455.56, 1292333.35, 1032443.35, 1133260.11,
1229593.84, 1074569.64, 1370905.58), A2010 = c(1458624.41, 942099.6,
1210951.2, 1151423.89, 1598355.1, 1370856.78, 1420547.36, 2048291.06,
3043637.6, 3669634.09, 3641665.16, 6780879.37), A2011 = c(6229245.09,
5553163.01, 6372919.9, 6755054.64, 7119008.27, 7585411.87, 7258675.63,
7250944.21, 6227706.73, 5795989.01, 4015226.43, 5391952.87),
A2012 = c(4407422.89, 4248144.11, 3537103.4, 3500595.75,
4049074.18, 3279868.96, 3420974.23, 2602310.3, 2225635.25,
2853467.41, 2830482.27, 2823590.65), A2013 = c(3006568.05,
2615730, 2833299.1, 3438797.32, 3224926.48, 2794029.57, 3003458.16,
2486931.57, 2515076.46, 2674568.38, 1731063.04, 2054559.54
), A2014 = c(1749745.71, 1902865, 1605746.41, 2116087.84,
NA, NA, NA, NA, NA, NA, NA, NA)), .Names = c("AMes", "A2009",
"A2010", "A2011", "A2012", "A2013", "A2014"), row.names = c(NA,
-12L), class = "data.frame")
Run Code Online (Sandbox Code Playgroud)
非常感谢您的帮助.
编辑
我不知道是否有可能使用这种样式进入格子传奇,其中点是图例中的线条内部:

我已经思考这个问题有一段时间了,但我一直很忙,所以到现在为止我没有太多时间来解决这个问题。我更好地理解你原来的问题是什么。默认情况下,莱迪思不喜欢将点堆叠在图例中的线的顶部。这根本不是一个容易获得的选择。但是,如果您愿意深入研究grid(该软件包Lattice是基于该软件包构建的),您几乎可以做任何事情。所以我整理了一个我认为可能适合你的解决方案。这应该在以下情况下起作用:
auto.key=(..., points=T, lines=T)这里的策略是为绘图提供定制的图例绘制函数。我尝试尽可能多地重用莱迪思的计算。我截取网格视口并进行一些更改以合并线和点。下面是自定义的图例绘制函数:
drawComboKey <- function(...) {
key = simpleKey(...)
key = draw.key(key, draw = FALSE)
ngroups <- (length(key$children)-1)/3
#remove points column
key$framevp$layout$ncol <-
key$framevp$layout$ncol-3L
key$framevp$layout$respect.mat <-
key$framevp$layout$respect.mat[,-(3:5)]
key$framevp$layout$widths <-
key$framevp$layout$widths[-(3:5)]
#adjust background
key$children[[1]]$col[2] <-
key$children[[1]]$col[2]-3L
key$children[[1]]$cellvp$layout.pos.col[2] <-
key$children[[1]]$cellvp$layout.pos.col[2]-3L
key$children[[1]]$cellvp$valid.pos.col[2] <-
key$children[[1]]$cellvp$valid.pos.col[2]-3L
#combine lines/points
mylines<-(2+ngroups*2):(1+ngroups*3)
for(i in mylines) {
key$children[[i]]$children <-
gList(key$children[[i-ngroups]]$children, key$children[[i]]$children)
key$children[[i]]$childrenOrder <-
names(key$children[[i]]$children)
key$children[[i]]$col <- key$children[[i]]$col-3L
key$children[[i]]$cellvp$layout.pos.col <-
key$children[[i]]$cellvp$layout.pos.col-3L
key$children[[i]]$cellvp$valid.pos.col <-
key$children[[i]]$cellvp$valid.pos.col-3L
}
key$childrenOrder<-names(key$children)
key
}
Run Code Online (Sandbox Code Playgroud)
要使用此函数,您必须截取网格对象并将其设置为图例的绘制函数。所以,从上次的代码开始
library(lattice)
library(latticeExtra)
parSettings <- list(
layout.widths=list(left.padding=8,rigth.padding=20),
superpose.line=list(lwd=2),
superpose.symbol=list(pch=16)
)
comma_formatter <- function (lim, logsc = FALSE, at = NULL, ...) {
ans <- yscale.components.default(lim = lim, logsc = logsc, at = at, ...)
xxPrime <- as.numeric(ans$left$labels$labels)
ans$left$labels$labels <- formatC(xxPrime, format = "fg", big.mark = ",")
ans
}
D <- xyplot(A2009+A2010+A2011+A2012+A2013+A2014 ~ factor(NM$AMes,unique(NM$AMes)), NM,
type = c("p","l"),
yscale.components = comma_formatter,
auto.key=list(space="right", lines=TRUE,points=TRUE),
par.settings = parSettings,layout=c(1,1),aspect=0.6,
main = "Delta Index",
cex.axis=4,
scales=list(x=list(rot=90,font=2,cex=0.8),y=list(font=2),tick.number=9))
D$legend$right$fun = "drawComboKey"
D;
Run Code Online (Sandbox Code Playgroud)
所以你可以在倒数第二行看到我指定了新的绘图函数。差不多就是这样了。这个功能非常脆弱,基本上是一个 hack。如果莱迪思决定改变它构建图例或类似内容的方式,我不能保证它总是有效,因此使用风险自负。尽管如此,它还是一个很好的例子,说明了您可以使用网格对象来自定义它们。
结果如下:

| 归档时间: |
|
| 查看次数: |
2187 次 |
| 最近记录: |