Ggplot2 में अक्ष लेबल को घुमा और रिक्ति करना


668

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

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

यहाँ छवि विवरण दर्ज करें

जवाबों:


1109

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

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

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

वैकल्पिक शब्द

ऊपर की छवि इस ब्लॉग पोस्ट की है


95
Ggplot2 के नवीनतम संस्करण में कमांड होगा: q + theme(axis.text.x=element_text(angle = -90, hjust = 0))
rnorberg

55
उन लोगों के लिए जिनके साथ अन्याय व्यवहार नहीं किया जा रहा है जैसा कि यहां वर्णित है, कोशिश करें theme(axis.text.x=element_text(angle = 90, vjust = 0.5))। Ggplot2 0.9.3.1 के रूप में यह समाधान प्रतीत होता है।
लिलस्टर

42
वास्तव में, मुझे ऊपर दिए गए दो समाधानों को सही ढंग से संरेखित लेबल प्राप्त करने के लिए संयोजित करना था:q + theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1))
jupp0r

32
@ jupp0r की सही। theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1))वर्तमान में काम कर रहा है।

51
यदि आप 45 ° घुमाए गए लेबल (पढ़ने में आसान) चाहते हैं, तो theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust=1))अच्छे परिणाम मिलते हैं
Jan-glx

88

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

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

81

उपयोग coord_flip()

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

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

यहाँ छवि विवरण दर्ज करें


डेटा विज्ञान के लिए R के Ch 3.9 में , विकम और ग्रोलेमंड इस सटीक प्रश्न को बोलते हैं:

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


26

मैं एक वैकल्पिक समाधान प्रदान करना चाहता हूं, जो मैं प्रस्तावित करने वाला हूं उसके समान एक मजबूत समाधान 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)
}

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

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

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

उदाहरण


1
मैं एक ही परिणाम प्राप्त नहीं करता हूं, मेरे लिए आपके ऑटो विधि का उपयोग करके अक्ष पाठ को कभी भी अच्छी तरह से समायोजित नहीं किया गया है। हालांकि, rads = (-angle - positions[[ position ]])*pi/180उत्पादित बेहतर प्लेसमेंट का उपयोग करते हुए । कोण से पहले अतिरिक्त माइनस साइन पर ध्यान दें। वैसे भी कोड के लिए धन्यवाद :)
asac

7

Ggpubr पैकेज प्रदान करता है एक शॉर्टकट है कि डिफ़ॉल्ट (सही संरेखित करें, मध्य संरेखित पाठ बॉक्स टिक) सही काम करता है:

library(ggplot2)
diamonds$cut <- paste("Super Dee-Duper", as.character(diamonds$cut))
q <- qplot(cut, carat, data = diamonds, geom = "boxplot")
q + ggpubr::rotate_x_text()

2018-11-06 को रेप्रेक्स पैकेज द्वारा बनाया गया (v0.2.1)

प्रासंगिक तर्क नामों के लिए GitHub खोज के साथ मिला: https://github.com/search?l=R&q=element_text+angle+90+vjust+org%3Acran&type=Code


5

वैकल्पिक रूप से, लेबल को लंबवत चकमा देकर ओवर-प्लॉटिंग समस्या को दूर करने के लिए ( तर्क के रूप में या तर्क के रूप में ) ggplot 3.3.0प्रदान करता है । यह इस मामले में काफी अच्छा काम करता है:guide_axis(n.dodge = 2)guidescale_..xguides

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

ggplot(diamonds, aes(cut, carat)) + 
  geom_boxplot() +
  scale_x_discrete(guide = guide_axis(n.dodge = 2)) +
  NULL


1

अतिरिक्त निर्भरता के बिना पठनीय x टिक लेबल प्राप्त करने के लिए, आप उपयोग करना चाहते हैं:

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

यह टिक लेबल 90 ° वामावर्त को घुमाता है और उन्हें उनके अंत ( hjust = 1) और उनके केंद्रों को क्षैतिज रूप से संबंधित टिक मार्क ( vjust = 0.5) के साथ लंबवत संरेखित करता है ।

पूर्ण उदाहरण:

library(ggplot2)
data(diamonds)
diamonds$cut <- paste("Super Dee-Duper",as.character(diamonds$cut))
q <- qplot(cut,carat,data=diamonds,geom="boxplot")
q + theme(axis.text.x = element_text(angle = 90, hjust = 1, vjust = 0.5))


ध्यान दें, कि ऊर्ध्वाधर / क्षैतिज औचित्य मानकों vjust/ hjustके element_textपाठ के सापेक्ष हैं। इसलिए, क्षैतिज केvjust लिए जिम्मेदार है संरेखण के ।

इसके बिना vjust = 0.5ऐसा लगेगा:

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

इसके बिना hjust = 1ऐसा लगेगा:

q + theme(axis.text.x = element_text(angle = 90, vjust = 0.5))

यदि कुछ (वायर्ड) कारण से आप टिक लेबल को 90 ° दक्षिणावर्त घुमाना चाहते थे (जैसे कि उन्हें बाईं ओर से पढ़ा जा सकता है) तो आपको उपयोग करने की आवश्यकता होगी q + theme(axis.text.x = element_text(angle = -90, vjust = 0.5, hjust = -1)):।

इस उत्तर की टिप्पणियों में यह सब पहले से ही चर्चा में है, लेकिन मैं इस सवाल पर इतनी बार वापस आता हूं, कि मुझे एक उत्तर चाहिए, जिससे मैं केवल टिप्पणियों को पढ़े बिना कॉपी कर सकता हूं।


0

पैकेज coord_flip()का उपयोग करने का एक विकल्प है ggstance। लाभ यह है कि यह ग्राफ़ को अन्य ग्राफ़ प्रकारों के साथ संयोजित करना आसान बनाता है और आप अपने समन्वय प्रणाली के लिए निश्चित पैमाने पर अनुपात निर्धारित कर सकते हैं ।

library(ggplot2)
library(ggstance)

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

ggplot(data=diamonds, aes(carat, cut)) + geom_boxploth()

2020-03-11 को रेप्रेक्स पैकेज (v0.3.0) द्वारा बनाया गया

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.