R 晶格xyplot未显示Y轴上所有级别的因子:未完成绘图

R 晶格xyplot未显示Y轴上所有级别的因子:未完成绘图,r,plot,lattice,R,Plot,Lattice,我使用晶格中的xyplot()来绘制数据帧定义的箭头,该数据帧有3列:posi(数字)、from(字符)和to(字符)。问题是:有时,箭头超出了情节的范围。换句话说,绘图窗口不够大,无法显示所有数据 我试图明确地添加因子级别,但没有效果。似乎如果因子“df$from”中不存在更极端的水平(例如“D”),则这些水平不会被计算以绘制绘图窗口。我查看了ylim,但这仅限于数值 我环顾四周,发现了很多关于重新缩放、重新排列轴的信息,但对解决手头的问题没有任何帮助。此问题与@skan:提出的问题相关 我的

我使用
晶格中的
xyplot()
来绘制数据帧定义的箭头,该数据帧有3列:posi(数字)、from(字符)和to(字符)。问题是:有时,箭头超出了情节的范围。换句话说,绘图窗口不够大,无法显示所有数据

我试图明确地添加因子级别,但没有效果。似乎如果因子“df$from”中不存在更极端的水平(例如“D”),则这些水平不会被计算以绘制绘图窗口。我查看了
ylim
,但这仅限于数值

我环顾四周,发现了很多关于重新缩放、重新排列轴的信息,但对解决手头的问题没有任何帮助。此问题与@skan:提出的问题相关

我的数据:

l <- c("A", "B", "C", "D")
df <- data.frame(posi = c(1, 2, 3, 4, 5), 
                 from = factor(c("A", "B", "C", "D", "A"), levels = l, ordered = TRUE),
                 to = factor(c("C", "D", "D", "C", "A"), levels = l, ordered = TRUE)
)

当我只使用同一数据帧的前3行,且“旧”因子水平保持不变时,绘图没有考虑到以后需要“D”水平

## only first 3 rows, without element "D" in the factor df$from
df <- df[1:3, ] 
##仅前3行,系数df$from中没有元素“D”

df可以通过在调用xyplot时指定“drop.unused.levels=FALSE”来避免该问题

library(lattice)

l <- c("A", "B", "C", "D")
df <- data.frame(posi = c(1, 2, 3, 4, 5), 
             from = factor(c("A", "B", "C", "D", "A"), levels = l, 
                           ordered = TRUE),
             to = factor(c("C", "D", "D", "C", "A"), levels = l, 
                         ordered = TRUE))


xyplot(from ~ posi , type="p", col="black",  data=df, pch=16, xlim = c(0,7), 
   panel = function(...){
     panel.dotplot(x = df$posi, y = df$from, col ="green", cex=1.6)
     panel.dotplot(x = (df$posi+1), y = df$to, col="black", cex=1.)
     panel.arrows(x0 = df$posi, y0 = df$from, x1 = df$posi+1, y1 = df$to, 
                  lwd=2, col="blue" )
   })
库(晶格)
L
library(lattice)

l <- c("A", "B", "C", "D")
df <- data.frame(posi = c(1, 2, 3, 4, 5), 
             from = factor(c("A", "B", "C", "D", "A"), levels = l, 
                           ordered = TRUE),
             to = factor(c("C", "D", "D", "C", "A"), levels = l, 
                         ordered = TRUE))


xyplot(from ~ posi , type="p", col="black",  data=df, pch=16, xlim = c(0,7), 
   panel = function(...){
     panel.dotplot(x = df$posi, y = df$from, col ="green", cex=1.6)
     panel.dotplot(x = (df$posi+1), y = df$to, col="black", cex=1.)
     panel.arrows(x0 = df$posi, y0 = df$from, x1 = df$posi+1, y1 = df$to, 
                  lwd=2, col="blue" )
   })
df2 <- df[1:3,]
xyplot(from ~ posi , type="p", col="black",  data=df2, pch=16, xlim = c(0,7), 
   drop.unused.levels = FALSE,
   panel = function(...){
     panel.dotplot(x = df2$posi, y = df2$from, col ="green", cex=1.6)
     panel.dotplot(x = (df2$posi+1), y = df2$to, col="black", cex=1.)
     panel.arrows(x0 = df2$posi, y0 = df2$from, x1 = df2$posi+1, 
                  y1 = df2$to, lwd=2, col="blue" )
   })