Ggplot2 के साथ लीजेंड अल्फा कैसे सेट करें


81

मेरे पास दिशा के खिलाफ हवा की गति का एक ग्राफ है, जिसमें अंकों का एक विशाल संख्या है, और इसलिए रंग = महीने के अलावा अल्फा = I (1/20) का उपयोग कर रहा हूं

यहाँ कोड का एक नमूना है:

library(RMySQL)
library(ggplot2)
con <- dbConnect(...)
wind <- dbGetQuery(con, "SELECT speed_w/speed_e AS ratio, dir_58 as dir, MONTHNAME(timestamp) AS month, ROUND((speed_w+speed_e)/2) AS speed FROM tablename;");

png("ratio-by-speed.png",height=400,width=1200)
qplot(wind$dir,wind$ratio,ylim=c(0.5,1.5),xlim=c(0,360),color=wind$month,alpha=I(1/30),main="West/East against direction")
dev.off()

यह एक सभ्य ग्राफ पैदा करता है, हालांकि मेरा मुद्दा यह है कि किंवदंती के अल्फा 1/30 वें भी हैं, जो इसे अपठनीय बनाता है। क्या कोई ऐसा तरीका है जिससे मैं किंवदंती को 1 अल्फ़ा होने के बजाय मजबूर कर सकता हूँ?

यहाँ एक उदाहरण है: उदाहरण ग्राफ

जवाबों:


112

संस्करण 0.9.0 की रिलीज़ के साथ अपडेट करें , अब override.aesकोई guidesफ़ंक्शन में उपयोग करके किंवदंती में सौंदर्य मूल्यों को ओवरराइड कर सकता है । इसलिए यदि आप अपने प्लॉट में कुछ इस तरह से जोड़ते हैं:

+ guides(colour = guide_legend(override.aes = list(alpha = 1)))

इससे हो जाना चाहिए।


मैंने डेटा के एक खाली उपसमूह का उपयोग करके और उस कॉल से लीजेंड का उपयोग करके जूम को एक डुप्लिकेट कॉल करके इसके चारों ओर मिल गया है। दुर्भाग्य से, यह काम नहीं करता है यदि डेटा फ्रेम वास्तव में खाली है (जैसे आप से प्राप्त करेंगे subset(diamonds,FALSE)) क्योंकि ggplot2 इस मामले का इलाज करने के लिए लगता है, क्योंकि यह NULLडेटा फ्रेम के स्थान पर व्यवहार करता है। लेकिन हम केवल एक पंक्ति के साथ एक सबसेट ले कर और NaNएक प्लॉट आयामों में से एक पर एक ही प्रभाव प्राप्त कर सकते हैं , जो इसे प्लॉट होने से रोक देगा।

चेस के उदाहरण के आधार पर:

# Alpha parameter washes out legend:
gp <- ggplot() + geom_point(data=diamonds, aes(depth, price, colour=clarity), alpha=0.1)
print(gp)

# Full color legend:
dummyData <- diamonds[1, ]
dummyData$price <- NaN
#dummyData <- subset(diamonds, FALSE)   # this would be nicer but it doesn't work!
gp <- ggplot() +
  geom_point(data=diamonds, aes(depth, price, colour=clarity), alpha=0.1, legend=FALSE) + 
  geom_point(data=dummyData, aes(depth, price, colour=clarity), alpha=1.0, na.rm=TRUE)
print(gp)

1
प्रतिभाशाली। यह समाधान अद्भुत था। केवल इसे आज़माने के लिए गोल किया गया। एक इलाज काम करता है
क्रिस

3
+1 @ @ जोर्न के अपडेट के लिए (और एक बढ़िया हैक जो अब अनावश्यक है)
ग्रिगोर थॉमस

मैं संस्करण 0.9.3.1 का उपयोग कर रहा हूं, लेकिन यह मेरे लिए काम नहीं करता है। मैंने guides()विभिन्न पदों पर कार्य किया है, लेकिन मुझे अपेक्षित व्यवहार नहीं मिला है। कोई संकेत?
ध्रुवीकरण

एक पुराने धागे को जोड़ने के लिए, आपको colourरंगों को सेट करने के लिए जो आप उपयोग कर रहे हैं उसके आधार पर बदलना होगा । उदाहरण के लिए मैंने उपरोक्त समाधान का उपयोग तब से किया guides(fill = guide_legend(...))जब से मैंने aes(fill = val)अपने प्लॉट के लिए इस्तेमाल किया
Mxblsdl

4

थोडा गुग्लिंग ने इस पोस्ट को बदल दिया जो यह इंगित नहीं करता है कि ggplot वर्तमान में इस विकल्प का समर्थन करता है। अन्य लोगों ने ग्रिडएक्स्ट्रा का उपयोग करके और व्यूपोर्ट का उपयोग करके संबंधित समस्याओं को संबोधित किया है जैसा कि यहां चर्चा की गई है

मैं वह परिष्कृत नहीं हूं, लेकिन यहां एक दृष्टिकोण है जो आपको वांछित परिणाम देना चाहिए। दृष्टिकोण दो बार जियोम को प्लॉट करने का है, एक बार बिना अल्फा पैरामीटर और वास्तविक प्लॉटिंग क्षेत्र के बाहर। दूसरे जियोम में अल्फा पैरामीटर शामिल होगा और लीजेंड को दबाएगा। फिर हम xlim और ylim के साथ प्लॉटिंग क्षेत्र को निर्दिष्ट करेंगे। यह देखते हुए कि आप बहुत सारे बिंदु हैं, यह प्लॉटिंग समय को लगभग दोगुना कर देगा, लेकिन आपको उस प्रभाव को देना चाहिए जो आप बाद में हैं।

हीरे के डाटासेट का उपयोग करना:

#Alpha parameter washes out legend
ggplot(data = diamonds, aes(depth, price, colour = clarity)) + 
geom_point(alpha = 1/10)

#Fully colored legend
ggplot() +
geom_point(data = diamonds, aes(depth, price, colour =clarity), alpha = 1/10, legend = FALSE) + 
geom_point(data = diamonds, aes(x = depth - 999999, y = price - 999999, colour = clarity)) +
xlim(40, 80) + ylim(0, 20000) 
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.