我尝试使用在每个组的第一个值上叠加符号的组和面板创建线图。此尝试仅绘制第一组的第一个点,而不对其他两个组执行任何操作。
library(lattice)
foo <- data.frame(x=-100:100, y=sin(c(-100:100)*pi/4))
xyplot( y~x | y>0, foo, groups=cut(x,3),
panel = function(x, y, subscripts, ...) {
panel.xyplot(x, y, subscripts=subscripts, type='l', ...)
# almost but not quite:
panel.superpose(x[1], y[1], subscripts=subscripts, cex=c(1,0), ...)
} )
可以理解一般解决方案,以允许绘制每个组和面板内的特定点(例如,第一,中间和端点)。
答案 0 :(得分:5)
(感谢您提出这个好的lattice
问题。)您应该使用下标,因为它是为面板选择单个数据点的机制:在此您要按面板选择groups
:{{1 }}。获得正确的分组变量后,您可以使用它来分割数据并选择每个组的第一个元素:
groups[subscripts]
您使用 ## first points
xx = tapply(x,groups[subscripts],'[',1)
yy = tapply(y,groups[subscripts],'[',1)
## end points
xx = tapply(x,groups[subscripts],tail,1)
yy = tapply(y,groups[subscripts],tail,1)
(比基本panel.points
更高级别)绘制点。
panel.superpose
如果您想根据颜色组对点进行着色,则应将组参数添加到library(lattice)
foo <- data.frame(x=-100:100, y=sin(c(-100:100)*pi/4))
xyplot( y~x | y>0, foo, groups=cut(x,3),
panel = function(x, y, subscripts, groups,...) {
panel.xyplot(x, y, subscripts=subscripts, type='l',groups=groups, ...)
# Note the use `panel.points` and the grouping using groups[subscripts]
panel.points(tapply(x,groups[subscripts],'[',1),
tapply(y,groups[subscripts],'[',1),
cex=2,pch=20, ...)
} )
。 (我把这作为练习留给你)