2015-06-03 11 views
8

में लंबे एक्स लेबल के लिए मैन्युअल रूप से संक्षिप्त किंवदंतियों को बनाएं, मैं ggplot2 के साथ एक साधारण बार चार्ट बनाना चाहता हूं और मेरी समस्या यह है कि मेरे एक्स चर में लंबे तार होते हैं ताकि लेबल ओवरलैड हो जाएं।ggplot2

library(dplyr) 
library(tidyr) 
library(ggplot2) 

set.seed(42) 
datas <- data.frame(label = sprintf("aLongLabel%d", 1:8), 
      ok = sample(seq(0, 1, by = 0.1), 8, rep = TRUE)) %>% 
    mutate(err = abs(ok - 1)) %>% 
    gather(type, freq, ok, err) 

datas %>% 
    ggplot(aes(x = label, y = freq)) + 
    geom_bar(aes(fill = type), stat = "identity") 

enter image description here

मैं कम लोगों द्वारा लेबल बदल और एक किंवदंती मैचों को दिखाने के लिए बनाने के लिए करना चाहते हैं:

यहाँ नकली datas और साजिश कर रहे हैं।

मैं क्या कोशिश की है:

मैं geo_point में आकार एईएस पैरामीटर जो आकार (और भूखंडों आकार है कि मैं alpha = 0 साथ छिपाने) के साथ एक पौराणिक कथा का निर्माण करेगा का उपयोग करें। फिर मैं scale_shape_manual के साथ आकार बदलता हूं और एक्स लेबल को scale_x_discrete के साथ प्रतिस्थापित करता हूं। guides के साथ मैं अपने आकार के अल्फा पैरामीटर को ओवरराइड करता हूं ताकि वे किंवदंती में अदृश्य न हों।

leg.txt <- levels(datas$label) 
x.labels <- structure(LETTERS[seq_along(leg.txt)], 
         .Names = leg.txt) 

datas %>% 
    ggplot(aes(x = label, y = freq)) + 
    geom_bar(aes(fill = type), stat = "identity") + 
    geom_point(aes(shape = label), alpha = 0) + 
    scale_shape_manual(name = "Labels", values = x.labels) + 
    guides(shape = guide_legend(override.aes = list(size = 5, alpha = 1))) + 
    scale_x_discrete(name = "Label", labels = x.labels) 

enter image description here

यह मुझे उम्मीद उत्पादन देता है, लेकिन मुझे लगता है कि यह बहुत ही hacky है।

क्या ggplot2 इसे और अधिक करने का तरीका प्रदान करता है? धन्यवाद।

+1

आप उन्हें बजाय बारी बारी से करना चाहिए: http://stackoverflow.com/questions/ 1330 9 8 9/घूर्णन-और-दूरी-अक्ष-लेबल-इन-जीजीप्लॉट 2 –

+0

मैंने इसके बारे में भी सोचा नहीं था ... यह वास्तव में एक अच्छा विचार हो सकता है। –

+2

मुझे यह बहुत पसंद है, लेकिन इसे बेहतर शीर्षक की आवश्यकता है ताकि लोग इसे पा सकें। हो सकता है कि कुछ "संक्षेप में ggplot लेबल को छोटा करें"। और जबकि घूर्णन एक अच्छा समाधान है, कभी-कभी यह बेहतर होगा। –

उत्तर

2

रोटेशन समाधान पास्कल

ने सुझाव दिया

लेबल घुमाएँ और उन्हें किनारे करने के लिए संरेखित:

datas %>% 
    ggplot(aes(x = label, y = freq)) + 
    geom_bar(aes(fill = type), stat = "identity") + 
    theme(axis.text.x = element_text(angle = 90, hjust = 1)) 

enter image description here

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