我想创建一个带有分段或箭头的情节。
我们说我有这个玩具示例
temp <- data.frame(posi=c(1,2,3,3,2,1,5), from=c("A", "B", "C", "D", "D", "B", "A"),
to=c( "C", "D", "D", "C", "A", "A", "B"))
posi from to
1 A C
2 B D
3 C D
3 D C
2 D A
1 B A
5 A B
我想从&#34;来自&#34;定义的点中绘制段或箭头。及其起始位置到&#34;到&#34;和位置+1。
我要用ggplot创建情节
ggplot() + geom_point(data=temp, aes(x=posi, y=from, size=10),show.legend = FALSE) +
geom_point(data=temp, aes(x=posi+1, y=to, size=10),show.legend = FALSE) +
geom_segment(data=temp, aes(x=posi, y=from, xend=posi+1, yend=to),
arrow=arrow(type="closed", angle=10), size=1.5, color="blue") + theme_bw()
但是我想用Lattice做这件事,因为我的真实数据集要大得多(数百万行),格子工作得更快。 我知道我可以减少删除重复项的行数,但那是另一个故事。
我怎么能用格子做到?
我一直在研究,我认为我需要使用panel.segments或lsegments,但事情似乎要复杂得多,而且很难找到例子。
xyplot(from ~ posi , type="p", col="black", data=temp, pch=16,
panel = function(x, y, ...){ panel.segments(x,y,) })
我不知道在函数内部或内部面板中写入什么参数。
答案 0 :(得分:2)
您可以使用以下代码:
Class<? extends Temporal>
产生以下图表:
请告诉我这是否是你想要的。
我发布了一个关于@skan在评论中发现和描述的问题的问题:当一个&#34;极端&#34;级别(如&#34; D&#34;)在public boolean check(Temporal dateFieldToCheck, Temporal minDate, Temporal maxDate, Class<? extends Temporal> type) {
if (type == LocalDate.class) {
// code for LocalDate (use LocalDate.from() as above)
}
if (type == LocalDateTime.class) {
// code for LocalDateTime (use LocalDateTime.from() as above)
}
}
// convert all objects to LocalDate
check(z1, dt, d, LocalDate.class);
中不存在,然后是&#34; D&#34;即使&#34; D&#34;也不会成为图表的一部分。稍后将需要xyplot(from ~ posi , type="p", col="black", data=temp, pch=16, xlim = c(0,7),
panel = function(...){
panel.dotplot(x = (temp$posi+1), y = temp$to, col="black", cex=1.4)
panel.dotplot(x = temp$posi, y = temp$from, col ="black", cex=1.4)
panel.arrows(x0 = temp$posi, y0 = temp$from, x1 = temp$posi+1, y1 = temp$to, lwd=3, col="blue", )
}
)
。可以找到@Konn回答的问题 here 。
据我了解,我们需要temp$from
temp$to
,我们需要在factor
调用中添加指定ordered
的代码。在这个例子中,我们用&#34;极端&#34;显示全套。来自&#34;来自&#34;并作为极端&#34; D&#34;缺席:完整代码是:
drop.unused.levels = FALSE
产生以下照片:
我想我们已经解决了这个问题。