2009-08-25 35 views
420

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

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)) 

enter image description here

उत्तर

678

बदलें

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

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

alt text

छवि के ऊपर this blog post से है।

+80

ggplot2 आदेश के नवीनतम संस्करण में होगा: 'क्ष + थीम (axis.text.x = element_text (कोण = -90, hjust = 0))' ' – rnorberg

+0

नहीं रह गया है element_text', मौजूद है, जब तक यह है ggplot2 पैकेज में नहीं ... – naught101

+38

उन लोगों के लिए जिनके लिए अन्याय यहां वर्णित व्यवहार नहीं कर रहा है, 'थीम (axis.text.x = element_text (कोण = 9 0, vjust = 0.5)) आज़माएं। Ggplot2 0.9.3.1 के रूप में यह समाधान प्रतीत होता है। – lilster

57

टिक लेबल पूरी तरह से दिखाई और y- अक्ष लेबल के रूप में एक ही दिशा में पढ़ा पर पाठ करने के लिए,

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

को घुमाने नहीं देता है अब यह होना चाहिए: ''opts'' ---'' 'थीम'' और' 'theme_text'' ---' 'element_text'' – PatrickT

15

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

असल में, आपको एक क्रिया का निर्माण करके 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 और vjust तर्क के लिए 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) 

निम्नलिखित में से कौन पैदा करता है:

Example

+1

मुझे वही प्राप्त नहीं होता परिणाम, मेरे लिए धुरी पाठ कभी भी आपकी ऑटो विधि का उपयोग करके समायोजित नहीं किया जाता है। हालांकि, 'rads = (-ंगल - पद [[स्थिति]]) * पीआई/180' का उपयोग करके बेहतर प्लेसमेंट का उपयोग किया जाता है। कोण से पहले अतिरिक्त ऋण चिह्न नोट करें। वैसे भी कोड के लिए धन्यवाद :) –

16

उपयोग + coord_flip()

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

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

अपने भूखंड को यह लागू करना है, हम बस ggplot को + coord_flip() जोड़ें:

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

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

enter image description here

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

 संबंधित मुद्दे