में घनत्व के लिए पैमाने निर्दिष्ट करना मैं "एनिमेटेड गर्मी मानचित्र" बनाने के लिए कई घनत्व ग्राफ बनाने के लिए देख रहा हूं।ggplot2 की stat_density2d
चूंकि एनीमेशन के प्रत्येक फ्रेम तुलनीय होना चाहिए, इसलिए मैं प्रत्येक ग्राफ पर घनत्व -> रंग मैपिंग उन सभी के लिए समान होना चाहूंगा, भले ही डेटा की सीमा प्रत्येक के लिए बदल जाए।
यहाँ कोड मैं प्रत्येक व्यक्ति के ग्राफ के लिए इसका उपयोग करेंगे:
ggplot(data= this_df, aes(x=X, y=Y)) +
geom_point(aes(color= as.factor(condition)), alpha= .25) +
coord_cartesian(ylim= c(0, 768), xlim= c(0,1024)) + scale_y_reverse() +
stat_density2d(mapping= aes(alpha = ..level..), geom="polygon", bins=3, size=1)
कल्पना कीजिए मैं इस एक ही कोड का उपयोग, लेकिन हर फ्रेम पर 'this_df' बदल जाता है। तो एक ग्राफ में, शायद घनत्व 0 से 4e-4 तक है। दूसरे पर, घनत्व 0 से 4e-2 तक है।
डिफ़ॉल्ट रूप से, ggplot इनमें से प्रत्येक के लिए एक अलग घनत्व -> रंग मैपिंग की गणना करेगा। लेकिन इसका मतलब यह होगा कि दो ग्राफ - एनीमेशन के दो फ्रेम - वास्तव में तुलनीय नहीं हैं। यदि यह एक हिस्टोग्राम या घनत्व साजिश था, तो मैं केवल coord_cartesian को कॉल करूँगा और एक्स और वाई lim को बदल दूंगा। लेकिन घनत्व साजिश के लिए, मुझे नहीं पता कि पैमाने को कैसे बदला जाए।
निकटतम मैं मिल सकता है यह है:
Overlay two ggplot2 stat_density2d plots with alpha channels
लेकिन मैं ही ग्राफ पर दो घनत्व भूखंडों डालने की विकल्प नहीं है, क्योंकि मैं उन्हें अलग फ्रेम होना चाहता हूँ।
किसी भी मदद की सराहना की जाएगी!
संपादित करें:
यहाँ एक प्रतिलिपि प्रस्तुत करने योग्य उदाहरण है:
set.seed(4)
g = list(NA,NA)
for (i in 1:2) {
sdev = runif(1)
X = rnorm(1000, mean = 512, sd= 300*sdev)
Y = rnorm(1000, mean = 384, sd= 200*sdev)
this_df = as.data.frame(cbind(X = X,Y = Y, condition = 1:2))
g[[i]] = ggplot(data= this_df, aes(x=X, y=Y)) +
geom_point(aes(color= as.factor(condition)), alpha= .25) +
coord_cartesian(ylim= c(0, 768), xlim= c(0,1024)) + scale_y_reverse() +
stat_density2d(mapping= aes(alpha = ..level.., color= as.factor(condition)), geom="contour", bins=4, size= 2)
}
print(g) # level has a different scale for each
आप स्तर पर रंग नहीं, 'अल्फा' मैप कर रहे हैं। आप 'scale_alpha_continuous (सीमा = ...)' जोड़कर अल्फा स्केल को नियंत्रित कर सकते हैं, जहां 'सीमाएं 'वेक्टर हैं, जो' ..level..' की इकाइयों में सीमा निर्दिष्ट करती हैं, इसलिए (0,4e-2) मुझे लगता है। यदि आप अपना डेटासेट प्रदान करते हैं, तो कोई आपको अधिक सहायता देने के इच्छुक हो सकता है। – jlhoward
प्रतिक्रिया के लिए धन्यवाद! मैंने नकली डेटा के साथ पुनरुत्पादित कोड जोड़ा है (असली डेटा साझा नहीं कर सकता)। ध्यान दें कि यदि आप जोड़ते हैं, तो इस कोड के अंत में '+ scale_alpha_continuous (सीमा = सी (0, 2e-6))' कहें, यह अल्फा स्केलिंग निरंतर बनाता है, लेकिन समोच्चों को ठीक नहीं करता है। मैं दो ग्राफों में समेकित स्केलिंग कैसे बना सकता हूं? – jwdink
क्या आप कह रहे हैं कि आप दोनों प्लॉट्स में ..level .. के समान मूल्यों के लिए रूपरेखा तैयार करना चाहते हैं? यदि ऐसा है, तो 'stat_density2d (...)' में 'breaks = ...' का उपयोग करें। – jlhoward