में एक से अधिक 'scale_fill_` का उपयोग करके मैं ggplot2
में एकाधिक परतों को प्रदर्शित करने का प्रयास कर रहा हूं, लेकिन मैं प्रत्येक परत के लिए अलग-अलग scale_fill_
रंग योजनाओं का उपयोग करना चाहता हूं। मुझे ऐसा नहीं लगता है, क्योंकि scale_fill_gradientn
जैसे कुछ को कॉल करने से दो बार पहले कॉल को ओवरराइट किया जाता है।`ggplot2`
library(ggplot2)
library(reshape2)
library(RColorBrewer)
set.seed(123)
मैं पहली बार साजिश करेंगे एक tile
ग्रिड (ध्यान दें मैं scale_fill_gradientn
साथ रंग सेट कर रहा हूं):
foo <- matrix(data = rnorm(100), ncol = 10)
foo <- melt(foo)
plot <- ggplot() +
geom_tile(data = foo,
mapping = aes(x = Var1, y = Var2, fill = value)) +
scale_fill_gradientn(
colours = rev(brewer.pal(7, "BrBG"))
)
plot
अब मैं शीर्ष पर एक और साजिश में शामिल करना चाहते उसमें से, लेकिन एक अद्वितीय रंग योजना के साथ। मैं बस ठीक एक अलग साजिश बना सकते हैं:
bar <- data.frame(x = rnorm(100, 4, 1),
y = rnorm(100, 6, 1.5))
ggplot() +
stat_density_2d(data = bar,
mapping = aes(x = x, y = y, fill = ..level..),
geom = "polygon") +
scale_fill_gradientn(
colours = rev(brewer.pal(7, "Spectral"))
) + xlim(0, 10) + ylim(0, 10)
मुझे क्या करना चाहते हैं भूखंड पहले की चोटी पर दूसरी साजिश है, लेकिन रंग योजनाओं ऊपर दिखने बनाए रखें। यदि मैं पहली बार दूसरी परत को जोड़ने की कोशिश करता हूं, तो मैं मूल scale_fill_gradientn
को ओवरराइट करता हूं, और दो परतों को एक रंग योजना साझा करने के लिए मजबूर करता हूं (जो इस मामले में दूसरी परत को पूरी तरह से एक रंग में गिरने के लिए "संपीड़ित" करता है:
plot <- plot +
stat_density_2d(data = bar,
mapping = aes(x = x, y = y, fill = ..level..),
geom = "polygon") +
scale_fill_gradientn(
colours = rev(brewer.pal(7, "Spectral"))
) + xlim(0, 10) + ylim(0, 10)
plot
वहाँ प्रत्येक परत के लिए अलग रंग योजनाओं निर्दिष्ट करने के लिए कोई तरीका है? मुझे लगता है कि, उदाहरण के लिए, stat_density_2d
समझता है एक colour
सौंदर्य नोटिस, लेकिन मैं कोई लाभ नहीं हुआ एक निर्दिष्ट करने की कोशिश की है (यह केवल पौराणिक कथाओं में एक लेबल के रूप में रंग जोड़ता है, और रंग योजना को डिफ़ॉल्ट में बदल देता है):
ggplot() +
stat_density_2d(data = bar,
mapping = aes(x = x, y = y, fill = ..level.., colour = "red"),
geom = "polygon") +
xlim(0, 10) + ylim(0, 10)
मुझे लगता है कि वहाँ एक "प्रति परत" के आधार पर रंग योजना स्थापित करने के लिए एक अलग तरह से होना चाहिए, लेकिन मैं स्पष्ट रूप से गलत स्थानों में देख रहा हूँ।
आप प्रति प्लॉट केवल एक भरने का स्तर प्राप्त कर सकते हैं। – Roland
धन्यवाद रोलैंड, मैं समझता हूं, और वह बाधा है जिसके खिलाफ मैं उछाल रहा हूं।मुझे लगता है कि मैं रंग योजना स्थापित करने के लिए एक वैकल्पिक विधि की तलाश में हूं, जैसे कि मैं उस सीमा के आसपास हो सकता हूं? – rosscova
यदि आप एक किंवदंती से खुश हैं तो आप दोनों पैमाने को एक पैमाने पर जोड़ सकते हैं। यदि आप दो स्केल चाहते हैं, तो आपको 'ggplotGrob' का उपयोग करने की आवश्यकता है और फिर' ग्रिड 'स्तर पर हैक करें, यानी, अपनी दूसरी साजिश से आवश्यक ग्रब्स निकालें और उन्हें पहले प्लॉट में जोड़ें। हालांकि, मुझे विश्वास है कि दो भरे किंवदंतियों के साथ एक साजिश एक बुरी साजिश है। – Roland