【问题标题】:Mark value range in dotplot在点图中标记值范围
【发布时间】:2015-02-06 21:47:27
【问题描述】:

我有以下数据框

   ds <- data.frame(iso2c=as.factor(c(rep("AR",3),rep("BR",3),rep("DE",3),rep("US",3))),

             region= as.factor(c(rep("LATAM",6),rep("DEVELOPED",6))),

             year= rep(c(1979,1989,1999),4),

             value= c( 47.0 , 28.6,  20.8, 100.0,  64.2,  35.4,  16.0 ,  9.0,   5.5,  15.6,  11.6,   8.6))                 )

并想将数据绘制成点图,如下,

  library(lattice)
  dotplot(iso2c~value, data=ds, groups=year,pch=19,col="dark blue",cex=1.3,ylab="country")

我想在整个值范围(从国家的最大值到国家的最小值)为每个国家绘制一条线。我不能使用“type=h”,因为它会将线从最大值绘制到零,而不是从最大值到最小值。 有什么建议吗?谢谢

【问题讨论】:

    标签: r lattice


    【解决方案1】:

    我认为这样做。我计算了“y”值组内 x 值的最大值和最小值,然后使用了 lattice-lsegments 函数

    dotplot(iso2c~value, groups=year, data=ds, panel = function(x,y,...) { 
                               x0=sapply( split(x,y), min)
                               y0=as.numeric(unique(y) )+.1
                               x1=sapply( split(x,y) ,max)
                               y1=as.numeric(unique(y)) +.1
               panel.dotplot(x, y,...)
               lsegments(x0,y0,x1,y1)
                               } ,
           pch=19,col="dark blue",cex=1.3,ylab="country")
    

    【讨论】:

    • 谢谢,完美运行,我只是将“...”参数添加到面板函数和对 panel.dotplot 的调用。
    • 好主意。对我来说,困难的方面是在经过多次失败的努力后才出现的,是正确安排分段端点的数据。我一直试图在向参数传递值的过程中做到这一点,但只有在我在调用lsegments 之前尝试这样做时才取得成功。使用“下标”或“组”不起作用,因为实际上只有一组下标,并且所有点都绘制在一个面板中。
    猜你喜欢
    • 2012-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-09
    相关资源
    最近更新 更多