首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >格木素图不显示Y轴上的所有因子:不完全图

格木素图不显示Y轴上的所有因子:不完全图
EN

Stack Overflow用户
提问于 2017-06-23 09:37:01
回答 1查看 518关注 0票数 0

我使用来自xyplot()Lattice来绘制由一个包含3列的dataframe定义的箭头: posi (数字),from (字符),to (字符)。问题是:有时,箭头超出了情节的规模。换句话说,绘图窗口不够大,无法可视化所有数据。

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

我环顾四周,发现了很多关于重新定标,重新排序的斧头,但没有任何东西帮助我解决手头的问题。这个问题与@skan:How to plot segments or arrows in Lattice中的一个问题有关。

我的数据:

代码语言:javascript
复制
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)
)

这一情节如预期的那样:

代码语言:javascript
复制
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" )
       }
)

当我只使用前3行,相同的数据框架,‘旧的’因子水平完好无损,绘图没有考虑到,稍后的"D“级别将是必要的。

代码语言:javascript
复制
## only first 3 rows, without element "D" in the factor df$from
df <- df[1:3, ] 

导致这一阴谋:

我希望能够设置Y轴的限制,并希望得到任何帮助或提示。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-27 13:46:24

可以通过在对xyplot的调用中指定"drop.unused.levels = FALSE“来避免这个问题。

代码语言:javascript
复制
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" )
   })

代码语言:javascript
复制
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" )
   })

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44718072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档