enter image description here

मैं ggplot2 पैकेज का उपयोग करके कुछ संयुक्त घटनाओं की संभावनाओं को एक रेखापुंज के रूप में प्रस्तुत करना चाहता हूं और आश्चर्य करता हूं कि geom_raster एक से अधिक सेल मूल्यों के मामले में किस मूल्य को बढ़ावा देना है। मेरे पास ऐसे मामले हैं जहां कुछ कारणों से इन घटनाओं में एक से अधिक संभावनाएं हो सकती हैं। नीचे दिए गए कोड और ऊपर दिए गए चित्र में, मैं निर्देशांक (10, 10) पर अपने प्रश्न के बिंदु का वर्णन करता हूं। क्या geom_raster अंतिम मान पर विचार करता है? क्या यह नमूना है?

library(ggplot2)

# Normal raster
r <- data.frame(x = 1:10, y = rep(10, 10), value = 1:10)

p1 <- ggplot(r, aes(x, y, fill=value))+
  geom_raster()+
  coord_equal()+
  theme(legend.position = 'bottom')+
  labs(title = 'Normal raster: every cell has one value')

p1

# Assuming that coordinate (10, 10) have values 10 and 0
r <- rbind(r, c(10, 10, 0))

p2 <- ggplot(r, aes(x, y, fill=value))+
  geom_raster()+
  coord_equal()+
  theme(legend.position = 'bottom')+
  labs(title = 'Raster having 2 different values (10 then 0) at coordinates (10, 10)')

p2
1
Liman 10 सितंबर 2020, 03:25

1 उत्तर

सबसे बढ़िया उत्तर

ऐसा प्रतीत होता है कि सेल के लिए केवल अंतिम मान का उपयोग किया गया है। तर्क स्रोत कोड में draw_panel में पाया जा सकता है GeomRaster का कार्य। हम यह कोड देखते हैं

  x_pos <- as.integer((data$x - min(data$x))/resolution(data$x, 
    FALSE))
  y_pos <- as.integer((data$y - min(data$y))/resolution(data$y, 
    FALSE))
  nrow <- max(y_pos) + 1
  ncol <- max(x_pos) + 1

  raster <- matrix(NA_character_, nrow = nrow, ncol = ncol)
  raster[cbind(nrow - y_pos, x_pos + 1)] <- alpha(data$fill, 
    data$alpha)

तो यह क्या करता है सभी मानों के लिए पंक्तियों और स्तंभों के साथ एक मैट्रिक्स बनाता है, फिर यह मैट्रिक्स इंडेक्सिंग का उपयोग करके एक असाइनमेंट करता है। जब आप ऐसा करते हैं, तो केवल अंतिम असाइनमेंट बचता है। उदाहरण के लिए

(m <- matrix(1:9, nrow=3))
#      [,1] [,2] [,3]
# [1,]    1    4    7
# [2,]    2    5    8
# [3,]    3    6    9
(rowcols <- cbind(c(2,3,2), c(3,1,3)))
#      [,1] [,2]
# [1,]    2    3
# [2,]    3    1
# [3,]    2    3
m[rowcols] <- 10:12
m
#      [,1] [,2] [,3]
# [1,]    1    4    7
# [2,]    2    5   12
# [3,]   11    6    9

हम जो कर रहे हैं वह एक मैट्रिक्स बना रहा है और फिर सेल (2,3), (3,1) और फिर (2,3) के मान को बदल रहा है। (2,3) को केवल अंतिम असाइनमेंट संरक्षित है (10 मान ओवरराइट किया गया है)। तो रखा गया मान उस क्रम पर निर्भर करता है जिस क्रम में आपका डेटा ggplot ऑब्जेक्ट को पास किया जाता है।

0
MrFlick 10 सितंबर 2020, 03:55