यह हैडली के वर्तमान geom_rug
कोड इस प्रकार है, लेकिन इसे जोड़ने के लिए (या घटाना) को संशोधित करता है एक उदाहरण के लिए गलीचा-टिक्स की आंतरिक इकाइयों के लिए पूर्ण राशि। यह वास्तव में grid::unit
का एक आवेदन है - किसी भी चीज़ से अधिक कार्यक्षमता, क्योंकि यह इस तथ्य का उपयोग करता है कि इकाइयों को अलग-अलग आधारों के साथ जोड़ा और घटाया जा सकता है। यूनिट (0.5, "सेमी") कहें, आप इसे "rug_len" -argument को अपने चयन के डिफ़ॉल्ट के साथ स्वीकार करने के लिए संशोधित कर सकते हैं। एक png मैं बनाने (, समारोह के environment
स्थापित करने के लिए याद करने की आवश्यकता है ताकि एक बंद, + ' `' , can call the next closure,
ggplot2 :: geom_rug2 ', सही ढंग से।)
geom_rug2 <- function (mapping = NULL, data = NULL, stat = "identity", position = "identity", sides = "bl", ...) {
GeomRug2$new(mapping = mapping, data = data, stat = stat, position = position, sides = sides, ...)
}
GeomRug2 <- proto(ggplot2:::Geom, {
objname <- "rug2"
draw <- function(., data, scales, coordinates, sides, ...) {
rugs <- list()
data <- coord_transform(coordinates, data, scales)
if (!is.null(data$x)) {
if(grepl("b", sides)) {
rugs$x_b <- segmentsGrob(
x0 = unit(data$x, "native"), x1 = unit(data$x, "native"),
y0 = unit(0, "npc"), y1 = unit(0, "npc")+unit(1, "cm"),
gp = gpar(col = alpha(data$colour, data$alpha), lty = data$linetype, lwd = data$size * .pt)
)
}
if(grepl("t", sides)) {
rugs$x_t <- segmentsGrob(
x0 = unit(data$x, "native"), x1 = unit(data$x, "native"),
y0 = unit(1, "npc"), y1 = unit(1, "npc")-unit(1, "cm"),
gp = gpar(col = alpha(data$colour, data$alpha), lty = data$linetype, lwd = data$size * .pt)
)
}
}
if (!is.null(data$y)) {
if(grepl("l", sides)) {
rugs$y_l <- segmentsGrob(
y0 = unit(data$y, "native"), y1 = unit(data$y, "native"),
x0 = unit(0, "npc"), x1 = unit(0, "npc")+unit(1, "cm"),
gp = gpar(col = alpha(data$colour, data$alpha), lty = data$linetype, lwd = data$size * .pt)
)
}
if(grepl("r", sides)) {
rugs$y_r <- segmentsGrob(
y0 = unit(data$y, "native"), y1 = unit(data$y, "native"),
x0 = unit(1, "npc"), x1 = unit(1, "npc")-unit(1, "cm"),
gp = gpar(col = alpha(data$colour, data$alpha), lty = data$linetype, lwd = data$size * .pt)
)
}
}
gTree(children = do.call("gList", rugs))
}
default_stat <- function(.) StatIdentity
default_aes <- function(.) aes(colour="black", size=0.5, linetype=1, alpha = NA)
guide_geom <- function(.) "path"
})
environment(geom_rug2) <- environment(ggplot)
p <- qplot(x,y)
p + geom_rug2(size=.1)
अपने कोड के साथ
:
मैंने बिना किसी सफलता के hadley's current description of how to extend ggplot2 का पालन करने का भी प्रयास किया।
+1 यह दिखाने के लिए कि पुराने पर आधारित एक नया भूगोल कैसे बनाया जाए। उस फ़ंक्शन के लिए एक प्रतीत होता है कि यहां तक कि सरल संपादन 'स्ट्रिंग' 'स्नैप' के साथ 'get (" draw ", ggplot2 ::: geomRug) 'द्वारा दिए गए फ़ंक्शन में' npc "' की सभी घटनाओं को प्रतिस्थापित करना है। –
"spnc" .... अच्छा एक! मैंने पहले कभी 'स्नैप' के बारे में नहीं सुना था। हालांकि मैं 'यूनिट' पृष्ठ को देख रहा था, मैंने इसे बहुत सावधानी से नहीं देखा। मौजूदा "एनपीसी" इकाइयों को छोड़कर एक rug_scale तर्क में डाल सकता है। पेजिंग @ हैडली। –
हाँ, यह अक्सर नहीं आता है। [यहां एकमात्र अन्य स्थान है] (http://stackoverflow.com/questions/13015110/color-a- डिज़ाइन किया गया-area/13015631#13015631) मैंने कभी इसे SO पर डेमो किया है। –