2012-07-18 10 views
15

मेरे पास हाईचार्ट्स के साथ एक बार चार्ट बनाया गया है जो इसकी एक्स-अक्ष के लिए श्रेणियों का उपयोग करता है - वास्तव में लंबी शब्दशः श्रेणियां। मैं यह सुनिश्चित करने के लिए एक अच्छा तरीका नहीं समझ सकता कि श्रेणियां हमेशा एक पंक्ति पर रहें। मैं उन्हें तब तक संक्षिप्त नहीं कर सकता जब तक कि मैं माउस होवर-ओवर या किसी अन्य सहज उपयोगकर्ता इंटरैक्शन पर लंबे संस्करण को दिखाने के लिए टूलटिप या कुछ का उपयोग नहीं कर सकता। जब श्रेणियां लाइन-रैप होती हैं, तो यह टेक्स्ट की दीवार की तरह दिखने लगती है।वास्तव में लंबी श्रेणी के नामों के साथ हाईचार्ट्स बार चार्ट से निपटने

लंबी श्रेणियों और डेटा को एक साफ तरीके से प्रदर्शित करने के लिए कोई विचार? मैं एक अलग प्रकार के चार्ट पर विचार करने के लिए तैयार हूं जब तक यह एक स्पष्ट और अच्छे दिखने वाले तरीके से डेटा प्रदर्शित करता है। मैं हाईचार्ट्स के साथ रहना चाहता हूं लेकिन केवल तभी संभव हो।

संपादित: काफी प्रयास के बाद, मैं (IE6 +) जिस तरह से एक क्रॉस-ब्राउज़र में एक एक्स-अक्ष श्रेणी लेबल के लिए एक टूलटिप जोड़ने का विचार पर छोड़ दिया गया है। JQuery के साथ भी यह संभव या व्यावहारिक प्रतीत नहीं होता है। मैं अभी भी किसी भी समाधान की तलाश कर रहा हूं जो मुझे इन लंबी श्रेणियों को अच्छी तरह से प्रदर्शित करने की अनुमति देता है (मैं fiddle से पहले खुश नहीं हूं क्योंकि मैंने पहले बनाया था क्योंकि डेटा बार पर होवर करना उपयोगकर्ता के लिए पर्याप्त नहीं है)।

समस्या ग्राफ की एक तस्वीर, श्रेणियों ब्लैक आउट कर के साथ: Labels too long, going to next line

JSFiddle कोड:

HTML:

<div id="container" style="min-width: 400px; height: 400px; margin: 0 auto"></div> 
<div id='mytoolTip'></div> 

जावास्क्रिप्ट:

$(function() { 
    var chart; 
    $(document).ready(function() { 
     chart = new Highcharts.Chart({ 
      chart: { 
       renderTo: 'container', 
       type: 'bar' 
      }, 
      title: { 
       text: 'Historic World Population by Region' 
      }, 
      subtitle: { 
       text: 'Source: Wikipedia.org' 
      }, 
      xAxis: { 
       categories: ['Africa blahblahblah blah blah blah ', 'America blahblahblah blah blah blah ', 'Asia blahblahblah blah blah blah', 'Europe blahblahblah blah blah blah ', 'Oceania blahblahblah blah blah blah '], 
        title: { 
         text: null 
        }, 
        labels: { 
         formatter: function() { 
          return(this.value.substring(0,10) + "..."); 
         } 
        }        
       }, 
       yAxis: { 
        min: 0, 
        title: { 
         text: 'Population (millions)', 
         align: 'high' 
        }, 
        labels: { 
         overflow: 'justify' 
        } 
       }, 
       tooltip: { 
        formatter: function() { 
         $("#mytoolTip").html(this.x + 'and the value is ' + this.y) ; 
         return false ; 
        } 
       }, 
       plotOptions: { 
        bar: { 
         dataLabels: { 
          enabled: true 
         } 
        } 
       }, 
       legend: { 
        layout: 'vertical', 
        align: 'right', 
        verticalAlign: 'top', 
        x: -100, 
        y: 100, 
        floating: true, 
        borderWidth: 1, 
        backgroundColor: '#FFFFFF', 
        shadow: true 
       }, 
       credits: { 
        enabled: false 
       }, 
       series: [{ 
        name: 'Year 1800', 
        data: [107, 31, 635, 203, 2] 
       }, { 
        name: 'Year 1900', 
        data: [133, 156, 947, 408, 6] 
       }, { 
        name: 'Year 2008', 
        data: [973, 914, 4054, 732, 34] 
       }] 
      }); 
     }); 
    }); 
+0

ट्रिम यदि आप बाहरी 'div' करने के लिए उपकरण -tip ले जाने के लिए एक बेहतर प्रारूप के लिए है कि आपके सवाल का जवाब है –

+0

हाँ, हालांकि मैं इस विकल्प को पहले से ही माना जाता है। किसी भी विचार को श्रेणी लेबल के निर्देशांक कैसे प्राप्त करें? – AlexMA

+0

श्रेणी के साथ आपके मन में आपके मन में क्या है? –

उत्तर

19

इस बेला का प्रयास करें:http://jsfiddle.net/a6zsn/70/

हम ने वही समस्या है जो हम अंततः लेबल HTML का उपयोग करने की अनुमति देकर हल किया था। हालांकि हम नीचे पोस्ट किए गए सटीक समाधान के साथ नहीं गए थे, यह आपके लिए काम करना चाहिए क्योंकि यह होवर पर पूरा पाठ दिखाने के लिए jQueryUI टूलटिप विजेट का उपयोग करता है।

ध्यान दें कि मैं xAxis.labels ऑब्जेक्ट को कैसे परिभाषित कर रहा हूं।

$(function() { 
    var chart; 
    $(document).ready(function() { 
     chart = new Highcharts.Chart({ 
      chart: { 
       renderTo: 'container', 
       type: 'bar', 
       events: { 
        load: function (event) { 
         $('.js-ellipse').tooltip(); 
        } 
       } 
      }, 
      title: { 
       text: 'Historic World Population by Region' 
      }, 
      subtitle: { 
       text: 'Source: Wikipedia.org' 
      }, 
      xAxis: { 
       categories: ['Africa is the best place to do safari. Label is soooo big that it iss ugly now. =(. -38023-8412-4812-4812-403-8523-52309583409853409530495340985 ', 'America is the best place you can ever live in ', 'Asia is the best food ever ', 'Europe best chicks ever on earth ', 'Oceania i dont know any thing about this place '], 
       title: { 
        text: null 
       }, 
       labels: { 
        formatter: function() { 
         var text = this.value, 
          formatted = text.length > 25 ? text.substring(0, 25) + '...' : text; 

         return '<div class="js-ellipse" style="width:150px; overflow:hidden" title="' + text + '">' + formatted + '</div>'; 
        }, 
        style: { 
         width: '150px' 
        }, 
        useHTML: true 
      } 
      }, 
      yAxis: { 
       min: 0, 
       title: { 
        text: 'Population (millions)', 
        align: 'high' 
       }, 
       labels: { 
        overflow: 'justify' 
       } 
      }, 
      tooltip: { 
       formatter: function() { 
        $("#mytoolTip").html(this.x + 'and the value is ' + this.y) ; 
        return false ; 
       } 
      }, 
      plotOptions: { 
       bar: { 
        dataLabels: { 
         enabled: true 
        } 
       } 
      }, 
      legend: { 
       layout: 'vertical', 
       align: 'right', 
       verticalAlign: 'top', 
       x: -100, 
       y: 100, 
       floating: true, 
       borderWidth: 1, 
       backgroundColor: '#FFFFFF', 
       shadow: true 
      }, 
      credits: { 
       enabled: false 
      }, 
      series: [{ 
       name: 'Year 1800', 
       data: [107, 31, 635, 203, 2] 
      }, { 
       name: 'Year 1900', 
       data: [133, 156, 947, 408, 6] 
      }, { 
       name: 'Year 2008', 
       data: [973, 914, 4054, 732, 34] 
      }] 
     }); 
    }); 

}); 
+1

श्रेणी के माध्यम से लूपिंग है हम .js-ellipse शैली की परिभाषा कहां पा सकते हैं? इस समाधान को साझा करने के लिए धन्यवाद। –

+0

का उपयोग करने का एक प्रभावी तरीका होगा: var labelTooltip = ''; $ ("हेड")। संलग्न करें (लेबलटूलिप); वापसी '

' + formatted + '
'; – wolfsbane

+0

मैंने इस तरह के समाधान को समझ लिया। लेकिन यह या तो आकर्षक नहीं है। आश्चर्य है कि क्या किसी ने या हाईचार्ट्स ने एक ऐसा तरीका निकाला है जहां लंबी लेबलों को निर्दिष्ट लाइनों की संख्या में लपेटने का विकल्प है, और शेष को इलिप्सिस के साथ छीनना है। – tnkh

6

jsFiddle

काम कर टूल टिप चलती:

एचटीएमएल

<div id='mytoolTip'></div>​ 

जावास्क्रिप्ट

tooltip: { 
      formatter: function() { 

       $("#mytoolTip").html(this.x + 'and the value is ' + this.y) ; 
       return false ; 
      } 
     }, 

यह कैसे आप उपकरण की नोक

मँडरा से श्रेणी के नाम पर प्राप्त कर सकते है
 this.key 

jsFiddle

+0

अच्छा जवाब - यह मदद कर सकता है। यदि कोई बेहतर उत्तर नहीं आती है तो मैं आपको क्रेडिट दूंगा। इस जवाब के साथ एकमात्र समस्या यह है कि जब स्क्रीन का आकार छोटा होता है या लेबल वास्तव में बड़े होते हैं तो एक्स-अक्ष लाइन रैपिंग के साथ श्रेणी लेबल की समस्या का समाधान नहीं होता है: http://jsfiddle.net/a6zsn/1/ देखें – AlexMA

+0

आपने मुझे बताया नहीं है कि श्रेणी स्ट्रिंग –

+0

के साथ आपकी योजना वास्तव में क्या है, मुझे कहीं भी पूर्ण, लंबा संस्करण देखने में सक्षम होना चाहिए, लेकिन यह एक्स-अक्ष लेबल होने पर लाइन-रैप नहीं कर सकता है। एक संक्षिप्त नाम ठीक है जब तक कि पूर्ण श्रेणी लेबल दृश्य-सक्षम (कहीं) हो। मैं लंबे लेबल की सरणी में मैप किए गए छोटे लेबलों की एक सरणी बना सकता हूं, फिर कस्टम टूलटिप बनाने के लिए अपनी jquery टूलटिप तकनीक का उपयोग करें। यदि कोई आसान समाधान है तो मुझे इसे देखना अच्छा लगेगा। – AlexMA

4

लेबल

xAxis: { 
      categories: ['Foo afkhbakfbakjfbakfbnbafnbaf', 'Bar', 'Foobar'], 
      labels: { 
       formatter: function() { 
        return this.value.substring(0, 8); 
       } 
      } 
     }, 
संबंधित मुद्दे