r - Ggplot2 में अक्ष लेबल को घूर्णन और दूरी




labels (3)

+ coord_flip() प्रयोग करें।

"डेटा विज्ञान के लिए आर" में, विकम और ग्रोलेमंड इस सटीक समस्या से बात करते हैं। अध्याय 3.8 में, स्थिति समायोजन , वे लिखते हैं:

coord_flip() x और y axes को स्विच करता है। यह उपयोगी है (उदाहरण के लिए), यदि आप क्षैतिज बॉक्सप्लॉट चाहते हैं। यह लंबे लेबल के लिए भी उपयोगी है: एक्स-अक्ष पर ओवरलैप किए बिना उन्हें फिट करना मुश्किल है।

इसे अपनी साजिश में लागू करना, हम + coord_flip() जोड़ते हैं:

data(diamonds)
diamonds$cut <- paste("Super Dee-Duper",as.character(diamonds$cut))

qplot(cut,carat,data = diamonds, geom = "boxplot") +
  coord_flip()

और अब सुपर लंबे खिताब क्षैतिज रूप से फैल गए हैं और पढ़ने में बहुत आसान हैं!

मेरे पास एक साजिश है जहां एक्स-अक्ष एक कारक है जिसका लेबल लंबा है। हालांकि शायद एक आदर्श विज़ुअलाइज़ेशन नहीं है, अभी के लिए मैं इन लेबलों को लंबवत होने के लिए बस घुमा देना चाहता हूं। मैंने नीचे दिए गए कोड के साथ इस भाग को समझ लिया है, लेकिन जैसा कि आप देख सकते हैं, लेबल पूरी तरह से दिखाई नहीं दे रहे हैं।

data(diamonds)
diamonds$cut <- paste("Super Dee-Duper",as.character(diamonds$cut))
q <- qplot(cut,carat,data=diamonds,geom="boxplot")
q + opts(axis.text.x=theme_text(angle=-90))


अंतिम पंक्ति को बदलें

q + theme(axis.text.x = element_text(angle = 90, hjust = 1))

डिफ़ॉल्ट रूप से, घुमावदार होने पर भी अक्ष के पाठ के केंद्र में गठबंधन होते हैं। जब आप +/- 90 डिग्री घुमाते हैं, तो आप आमतौर पर इसे किनारे पर गठबंधन करना चाहते हैं:

उपरोक्त छवि इस ब्लॉग पोस्ट से है


मैं एक वैकल्पिक समाधान प्रदान करना चाहता हूं, जो कि मैं प्रस्तावित करने के बारे में एक मजबूत समाधान प्रदान करता हूं , कैनवास रोटेशन सुविधा को पेश करने के बाद, ggtern के नवीनतम संस्करण में आवश्यक था।

असल में, आपको त्रिकोणमित्री का उपयोग करके रिश्तेदार पदों को निर्धारित करने की आवश्यकता होती है, एक ऐसा फ़ंक्शन element_text जो element_text ऑब्जेक्ट देता है, कोण (यानी डिग्री) और स्थिति (यानी x, y, शीर्ष या दाएं) में से एक जानकारी देता है।

#Load Required Libraries
library(ggplot2)
library(gridExtra)

#Build Function to Return Element Text Object
rotatedAxisElementText = function(angle,position='x'){
  angle     = angle[1]; 
  position  = position[1]
  positions = list(x=0,y=90,top=180,right=270)
  if(!position %in% names(positions))
    stop(sprintf("'position' must be one of [%s]",paste(names(positions),collapse=", ")),call.=FALSE)
  if(!is.numeric(angle))
    stop("'angle' must be numeric",call.=FALSE)
  rads  = (angle - positions[[ position ]])*pi/180
  hjust = 0.5*(1 - sin(rads))
  vjust = 0.5*(1 + cos(rads))
  element_text(angle=angle,vjust=vjust,hjust=hjust)
}

स्पष्ट रूप से, मेरी राय में, मुझे लगता है कि कोण को निर्दिष्ट करते समय, hjust में ggplot2 में एक 'ऑटो' विकल्प उपलब्ध कराया जाना चाहिए, वैसे भी, यह दर्शाता है कि उपर्युक्त काम कैसे करते हैं।

#Demonstrate Usage for a Variety of Rotations
df    = data.frame(x=0.5,y=0.5)
plots = lapply(seq(0,90,length.out=4),function(a){
  ggplot(df,aes(x,y)) + 
    geom_point() + 
    theme(axis.text.x = rotatedAxisElementText(a,'x'),
          axis.text.y = rotatedAxisElementText(a,'y')) +
    labs(title = sprintf("Rotated %s",a))
})
grid.arrange(grobs=plots)

जो निम्नलिखित उत्पन्न करता है:





labels