[R-br] Lattice segplot + panel.xblocks

FHRB Toledo fernandohtoledo em gmail.com
Segunda Dezembro 2 00:28:24 BRST 2013


Senhores,

Estou tentando fazer um gráfico usando a segplot()... até aí tudo perfeito!

Entretanto gostaria de "hachurar" uma área do background do gráfico e
tentei de várias formas, mas não consegui! O problema reside é que cada
painel terá uma área diferente para hachurar. Procurei e achei as funções
panel.xblocks() e pane.rect(). Acho que o caminho é por aí!

Gostaria da ajuda de vocês para tentar implementar isso... segue o CMR:


dados <- dput(dados)
structure(list(fator = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L), .Label = c("a", "b"), class = "factor"), tratamento = c(1L,
2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L,
16L, 17L, 18L, 19L, 20L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L,
10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 20L), media =
c(56.7273408697765,
21.6789539145706, 48.9147297325716, 16.128713312085, 72.2770042662147,
76.4078177803679, 50.9077623429051, 73.4185754594888, 6.10335920092642,
55.0889792680129, 73.2888965805648, 42.4138621293343, 61.1580652843309,
60.6674652959473, 61.985833396912, 59.1674199053476, 64.5810153586145,
49.9847839597647, 43.5403475266414, 73.2055926430283, 78.0443736554009,
29.0590364242541, 67.0013026876617, 21.7957799074036, 94.6993295797361,
97.3586875521169, 70.5384358034064, 84.0236784048615, 6.13251698933115,
72.2706008690223, 95.925565877041, 56.3692012642583, 79.8817867665571,
78.7296774114649, 78.3993769394509, 76.0775293205963, 80.0321741107855,
66.4321920049995, 54.1984087410355, 98.1778312021352), inferior =
c(43.1836043224278,
17.1528746401404, 37.1996905806528, 12.9475504916982, 46.7714226580457,
45.3692479773409, 39.7789554679844, 29.8329460853507, 2.56413580548224,
35.8089238584928, 47.4171926197379, 29.7410223171652, 39.6810438781391,
38.6961342195907, 37.1835630240529, 37.067425724059, 35.4724912266013,
35.2427573484592, 25.0802453164008, 51.397401326238, 67.626248555891,
18.7695537973605, 56.7158673051006, 14.4447744494442, 85.018794282225,
86.9126759092797, 60.2303195514873, 71.7768506217856, 0.319225404377661,
64.8335865483444, 85.7060969685811, 47.3588023848516, 70.3807330972353,
68.9839724287896, 65.9920666691623, 65.2925804505429, 69.4612476374327,
55.1810503876307, 44.5545294532709, 86.576660755252), superior =
c(62.3108540885626,
23.8615642963601, 53.7260587383325, 17.774181934749, 79.7146304606838,
84.9807494296331, 55.9924261554983, 86.5989631071634, 7.15646923884448,
60.7368137544209, 80.8316127544867, 46.572404145686, 67.4355492078165,
66.989163863718, 68.859173168856, 65.4348577926561, 72.5430140364942,
54.8771182917571, 48.6009761134763, 80.3851368007263, 87.1231257331536,
38.7305442725622, 76.1037592450441, 28.7278361811028, 102.689316368094,
106.025905852459, 79.6868529319033, 94.2065097903592, 11.6427132483976,
78.4162162468943, 104.39108823494, 64.3280982909318, 87.9131833084866,
86.9760720156632, 89.0620270643251, 85.2808640058557, 88.7701994563184,
76.4111720930247, 62.5587781906989, 107.948178577293)), .Names = c("fator",
"tratamento", "media", "inferior", "superior"), row.names = c(NA,
-40L), class = "data.frame")

segplot(reorder(tratamento, media) ~ inferior + superior | fator,
        data = dados,
        centers = media,
        draw.bands = FALSE,
        segments.fun = panel.arrows,
        ends = 'both',
        angle = 90,
        length = 1,
        unit = 'mm',
        panel = function(x, y, z, centers, subscripts, ...) {
          panel.segplot(x, y, z, centers = centers, subscripts =
subscripts, ...)
        })

Minha intenção é que o backgrund de cada painel tenha uma área preenchida
de vermelho, por exemplo, mas cada intervalo é diferente por painel... acho
que a única forma é informar essas áreas externamente, com outr data.frame,
seja por exemplo:

dadosAUX <- dput(dadosAUX)
structure(list(fator = structure(1:2, .Label = c("a", "b"), class =
"factor"),
    xleft = c(30, 50), xright = c(60, 80)), .Names = c("fator",
"xleft", "xright"), row.names = c(NA, -2L), class = "data.frame")

Assim... em cada painel, preciso que essa área seja preenchida por toda
extensão do eixo Y.

Qualquer ajuda é bem vinda.

Obrigado a todos!

Boa semana e que venha Dezembro!

att,
FH
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20131201/e433f1b2/attachment.html>


Mais detalhes sobre a lista de discussão R-br