Chart.js লাইন চার্টে সীমাবদ্ধ লেবেল সংখ্যা


96

আমি প্রাপ্ত তথ্য থেকে আমার চার্টে সমস্ত পয়েন্ট প্রদর্শন করতে চাই, তবে আমি তাদের জন্য সমস্ত লেবেল প্রদর্শন করতে চাই না, কারণ চার্টটি খুব বেশি পঠনযোগ্য নয়। আমি এটি ডক্সে খুঁজছিলাম, তবে এমন কোনও পরামিতি খুঁজে পেলাম না যা এটি সীমাবদ্ধ রাখবে।

উদাহরণস্বরূপ আমি কেবল তিনটি লেবেল নিতে চাই না, কারণ চার্টটিও তিন পয়েন্টের মধ্যে সীমাবদ্ধ। এটা কি সম্ভব?

আমার এখনই এরকম কিছু রয়েছে:

এখানে চিত্র বর্ণনা লিখুন

আমি যদি প্রতি তৃতীয়-চতুর্থ লেবেলটি কেবল রেখে দিতে পারি তবে দুর্দান্ত হবে। তবে আমি লেবেলগুলির বিকল্প সম্পর্কে একেবারে কিছুই পাইনি।


আপনি লিঙ্ক প্রদান করতে পারেন?
ধীররাজ

ওয়েবসাইটে? নাহ, আমি অ্যান্ড্রয়েডে অ্যাপ্লিকেশন করছি এবং এই চার্টটি আমার স্থানীয় পৃষ্ঠায় রয়েছে ..
মিমি

আপনি কোন লাইব্রেরি ব্যবহার করবেন তা নির্দিষ্ট করুন, ডেভ এক্সপ্রেস বা চার্ট.জেএস দ্বারা চার্টজেএস?
পাভেল গ্রুবা

@ মুমমম তুমি কিছু বের করেছ? আমি নীতার
মার্ক বোল্ডার

নিকিতার উত্তরটি সঠিক বলে মনে হচ্ছে। @mmmm, সঠিক উত্তরটি যেমন উপলক্ষে বিবেচনা করুন stackoverflow.com/a/39326127/179138
Caio কুনহা

উত্তর:


156

options.scales.xAxes.ticks.maxTicksLimitবিকল্পটি যুক্ত করার চেষ্টা করুন :

xAxes: [{
    type: 'time',
    ticks: {
        autoSkip: true,
        maxTicksLimit: 20
    }
}]

4
উপরের উত্তরটি প্লাস এই উত্তরটি এখানে stackoverflow.com/a/37257056/558094 , বোমা।
বিনায়ক গর্গ

4
এখানে কিছু ভুল আছে. আমি শেষ দুটি টিকের
মার্ক বোল্ডার

4
আপনি কোথা থেকে এই তথ্য পাবেন? Chart.js- এর জন্য আমি প্রচুর আনসওয়ার্স পড়ছি - আমি তাদের ডক্স চার্টজেএস.আর / ডকস / স্লেস্টে খুঁজে পাচ্ছি না , আমি কি এমন কোনও জায়গা খুঁজে পাচ্ছি যেখানে আমি আসলে এই সমস্ত ছোট্ট সম্পত্তি এবং অতিমাত্রায় কলব্যাক নথিভুক্ত করতে পারি?
ম্যাক্স ইয়ারি

4
স্যার, আপনি দুর্দান্ত!
জে গীথ

4
আপনি maxRotation: 0লেবেলগুলি বাদ দেওয়া শুরু করার আগে এটি ঘুরতে না চান তা আপনি যুক্ত করতে পারেন।
Caio Cunha

23

সংক্ষিপ্ততার জন্য, আসুন আপনার লেবেলের আসল তালিকাটি দেখে মনে হচ্ছে:

["0", "1", "2", "3", "4", "5", "6", "7", "8"]

যদি আপনি কেবল প্রতি চতুর্থ লেবেল প্রদর্শন করতে চান তবে আপনার লেবেলের তালিকাটি ফিল্টার করুন যাতে প্রতি চতুর্থ লেবেল ভরাট হয় এবং অন্য সমস্ত খালি স্ট্রিং থাকে (যেমন ["0", "", "", "", "4", "", "", "", "8"])।


এটি একটি দুর্দান্ত হ্যাক, ধন্যবাদ! আমি এখানে এটি যোগ ।
ট্রুফা

40
মনে রাখবেন যে ""পাসিংটি গ্রাফের সাথে সম্পর্কিত টুলটিপসও সরিয়ে দেয়!
হ্যওয়ায়ার

4
যদি না আমি কি ভুল বলেছি এই সহজে একটি তালিকা ধী সঙ্গে সম্পন্ন যাবে যদি আপনি যেমন যে 10th ট্যাগ দেখাতে চান: my_labels = [my_labels[i] if i % 10 == 0 else "" for i in range(len(my_list))]। প্রক্রিয়াটির সহজতর পরামিতিকরণের জন্য 10 নম্বর অবশ্যই ফাইলের শুরুতে ধ্রুবক হিসাবে ঘোষণা করা যেতে পারে।
পিকারামল

এটি ছাড়াও এটি করা যেতে পারে "", যেমন এই প্রশ্নের উত্তর হিসাবে উল্টাপাল্ট গার্ড লাইন ইস্যুটি চার্ট.জেএস সহ যেখানে ওপিকে কালো লাইনের সাথে একটি সমস্যা ছিল এই ডাবল উক্তিটির প্রথম ঘটনাটিতে উপস্থিত হয়েছিল, এই ক্ষেত্রে এটি আবার সহায়তা করেছিল, @ হাইওয়াইর উল্লেখ করেছে যে এটি সরঞ্জামটিপ থেকে লেবেলটি সরিয়ে ফেলেছে
এমআই-ক্রিয়েটিভিটি

15

চার্ট জেএস ভি 2 তে যে কেউ এটি অর্জন করতে চাইছেন তাদের জন্য নিম্নলিখিতগুলি কাজ করবে:

 var options =  {  
         scales: {
            xAxes: [{
                afterTickToLabelConversion: function(data){


                    var xLabels = data.ticks;

                    xLabels.forEach(function (labels, i) {
                        if (i % 2 == 1){
                            xLabels[i] = '';
                        }
                    });
                } 
            }]   
        }
}

তারপরে অপশনগুলি ভেরিয়েবলটি যথারীতি একটিতে পাস করুন:

myLineChart = new Chart(ctx, {
    type: 'line',
    data: data,
    options: options
});`

13

হালনাগাদ:

আমি এনইকের চার্ট.জেএস মাস্টার শাখা থেকে সর্বশেষ টান (জানুয়ারী 27, 2014) দিয়ে আমার কাঁটাচামচ আপডেট করেছি। https://github.com/hay-wire/Chart.js/tree/showXLabels

মূল উত্তর:

যারা এখনও এই সমস্যাটির মুখোমুখি হচ্ছেন, আমি একই সমস্যাটি সমাধান করার জন্য কিছুক্ষণ আগে চার্ট.জেসকে সংযুক্ত করেছিলাম। আপনি এটি পরীক্ষা করে দেখতে পারেন: https://github.com/hay-wire/Chart.js/tree/skip-xlabels => পুরানো শাখা! সর্বশেষ টানার জন্য শোএলবেলগুলি শাখা পরীক্ষা করুন।

ব্যবহারবিধি:

চার্ট এবং লাইন চার্টে বার প্রযোজ্য।

ব্যবহারকারী এখন একটি পাস করতে পারেন { showXLabels: 10 } কেবলমাত্র 10 টি লেবেল প্রদর্শন (এক্স অক্ষে উপস্থিত মোট লেবেলের সংখ্যার উপর নির্ভর করে প্রকৃত প্রদর্শিত লেবেলগুলির সংখ্যাটি কিছুটা আলাদা হতে পারে তবে এটি এখনও 10 এর কাছাকাছি থাকবে)

যখন প্রচুর পরিমাণে ডেটা থাকে তখন অনেক সাহায্য করে। এর আগে আঁকাবাঁকা জায়গাতে একে অপরের উপরে টানা এক্স অক্ষের লেবেলের কারণে গ্রাফটি বিধ্বস্ত দেখায়। এর সাথে showXLabels, ব্যবহারকারীর কাছে এখন লেবেলের সংখ্যা যে কোনও সংখ্যক লেবেল তার কাছে উপলব্ধ জায়গাতে ভাল ফিট করতে পারে তা হ্রাস করার নিয়ন্ত্রণ রয়েছে।

তুলনার জন্য সংযুক্ত চিত্রগুলি দেখুন।

বিনা showXLabelsবিকল্প : এখানে চিত্র বর্ণনা লিখুন

সঙ্গে { showXLabels: 10 }বিকল্পে পাস : এখানে চিত্র বর্ণনা লিখুন

এটিতে এখানে কিছু আলোচনা রয়েছে: https://github.com/nnnick/Chart.js/pull/521#issuecomment-60469304


এটি ব্যবহার করতে পছন্দ করবে তবে আমি অবশ্যই কিছু ভুল করছি। আমি github.com/hay-wire/Chart.js/blob/showXLabels/Chart.js উল্লেখ করেছি তবে (অক্টোবর 30, 2015 পর্যন্ত) এটি কাজ করে না এবং এমনকি "শোএক্সএলবেলস" শব্দটিও ধারণ করে না। Github.com/hay-wire/Chart.js/blob/skip-xlabels/Chart.jsবয়স্কটি ঠিক কাজ করে। সর্বশেষের একটি ওয়ার্কিং, ট্যাগযুক্ত সংস্করণ পেতে পছন্দ করবেন যাতে আমি এটি নিরাপদে সিডএন-লিঙ্কটি রাগজিট থেকে করতে পারি। এই ফিডল (কেবলমাত্র ইস্যুতে নিঃশেষিত না হয়ে
rkagerer

এটি ব্যবহারের চেষ্টা করা হলেও এটি মনে হচ্ছে 'Chart.Line.js' ব্যবহার হয় না, ফলে কোনও পরিবর্তন হয় না। আমি "নতুন চার্ট (সিটিএক্স) ব্যবহার করেছি। লাইন (ডেটা, বিকল্পগুলি)" একটি লেখচিত্র তৈরি করতে।
ফ্লায়িংনিম্বাস

চার্ট জেএস 2.6.0 ব্যবহার করে বিকল্পটি কাজ করে না। অবশেষে আমি @ বেন এর উত্তর ব্যবহার ছিল stackoverflow.com/a/26183983/3319454
3bdalla

4
আমি মনে করি এটি পূর্ববর্তী সংস্করণের অংশ
অলেক্সালেজানড্রয়েম

@alexalejandroem হ্যাঁ এটি 2014 সালে উত্তর দেওয়া হয়েছিল! ;-)
হেইওয়ায়ার

3

অক্ষ ঘোরার জন্য

এটা ব্যবহার কর:

          scales: {
        xAxes: [
          {
            // aqui controlas la cantidad de elementos en el eje horizontal con autoSkip
            ticks: {
              autoSkip: true,
              maxRotation: 0,
              minRotation: 0
            }
          }
        ]
      }

2

মতে chart.js GitHub ইস্যু # 12 । বর্তমান সমাধানগুলির মধ্যে রয়েছে:

  1. 2.0 আলফা ব্যবহার করুন (উত্পাদন নয়)
  2. খুব বেশি ভিড় হয়ে উঠলে এক্স-অক্ষগুলি লুকিয়ে রাখুন (মোটেই গ্রহণ করতে পারবেন না)
  3. ম্যানুয়ালি এক্স-অক্ষের লেবেল এড়িয়ে যাওয়া নিয়ন্ত্রণ করুন (প্রতিক্রিয়াশীল পৃষ্ঠায় নেই)

যাইহোক, কয়েক মিনিটের পরে, আমি মনে করি এর থেকে আরও ভাল সমাধান আছে।

নিম্নলিখিত স্নিপেট স্বয়ংক্রিয়ভাবে লেবেলগুলি আড়াল করবে । xLabelsপ্রার্থনা করার আগে খালি স্ট্রিং দিয়ে সংশোধন করুন draw()এবং তারপরে তাদের পুনরুদ্ধার করুন। আরও বেশি, পুনরায় ঘোরানো এক্স লেবেলগুলি লুকানোর পরে আরও জায়গা থাকায় প্রয়োগ করা যেতে পারে।

var axisFixedDrawFn = function() {
    var self = this
    var widthPerXLabel = (self.width - self.xScalePaddingLeft - self.xScalePaddingRight) / self.xLabels.length
    var xLabelPerFontSize = self.fontSize / widthPerXLabel
    var xLabelStep = Math.ceil(xLabelPerFontSize)
    var xLabelRotationOld = null
    var xLabelsOld = null
    if (xLabelStep > 1) {
        var widthPerSkipedXLabel = (self.width - self.xScalePaddingLeft - self.xScalePaddingRight) / (self.xLabels.length / xLabelStep)
        xLabelRotationOld = self.xLabelRotation
        xLabelsOld = clone(self.xLabels)
        self.xLabelRotation = Math.asin(self.fontSize / widthPerSkipedXLabel) / Math.PI * 180
        for (var i = 0; i < self.xLabels.length; ++i) {
            if (i % xLabelStep != 0) {
                self.xLabels[i] = ''
            }
        }
    }
    Chart.Scale.prototype.draw.apply(self, arguments);
    if (xLabelRotationOld != null) {
        self.xLabelRotation = xLabelRotationOld
    }
    if (xLabelsOld != null) {
        self.xLabels = xLabelsOld
    }
};

Chart.types.Bar.extend({
    name : "AxisFixedBar",
    initialize : function(data) {
        Chart.types.Bar.prototype.initialize.apply(this, arguments);
        this.scale.draw = axisFixedDrawFn;
    }
});

Chart.types.Line.extend({
    name : "AxisFixedLine",
    initialize : function(data) {
        Chart.types.Line.prototype.initialize.apply(this, arguments);
        this.scale.draw = axisFixedDrawFn;
    }
});

দয়া করে লক্ষ্য করুন যে cloneএটি একটি বাহ্যিক নির্ভরতা।



0

এই উত্তর কবজির মতো কাজ করে।

আপনি যদি cloneফাংশনটি সম্পর্কে ভাবছেন তবে এটি ব্যবহার করে দেখুন:

var clone = function(el){ return el.slice(0); }

-1

Chart.js ফাইলটিতে আপনার খুঁজে পাওয়া উচিত (আমার জন্য 884 লাইনে)

var Line = function(...
    ...
    function drawScale(){
        ...
        ctx.fillText(data.labels[i], 0,0);
        ...

আপনি শুধু যে এক লাইন কল মোড়ানো তাহলে fillTextসঙ্গে if ( i % config.xFreq === 0){ ... } এবং তারপর chart.Line.defaultsঅ্যাড কিছু লাইন xFreq : 1আপনি ব্যবহার শুরু করতে সক্ষম হওয়া উচিত xFreqআপনার optionsআপনি কল যখনnew Chart(ctx).Line(data, options)

মনে মনে হ'ল এটি বেশ হ্যাকি।


4
আসল গ্রন্থাগার ফাইলটি কখনই পরিবর্তন করবেন না, যা কোনও সংস্করণ আপডেটের পরে ভাঙবে।
র‌্যাপটার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.