تخفیف ویژه

آموزش رسم نمودار با Highcharts (جلسه 38) - نمودار زاویه ای - قسمت 2

دسته بندی: جاوا اسکریپت
زمان مطالعه: 16 دقیقه
۲۹ خرداد ۱۳۹۵

در این جلسه با ادامه موضوع مربوط به رسم نمودار با Highcharts در خدمتتون هستم. highcharts

نمونه دوم : نمودار زاویه ای بصورت توپر

در این نمونه میخایم یک نمونه نمودار رو در اختیارتون قرار بدیم که در اون میتونیم داده‌ها رو به صورت دایره‌های توپری قرار بدیم که مقدار شعاع اونا من و زیاد میشه و مقدار رو نمایش میدن. این نمودار‌ها بصورت Donut هستن و یک نیم دایره رو تشکیل میدن. کل کدهای مربوط به این نمونه رو در اختیارتون میزارم و بعد براتون توضیح میدم:

<html>

<head>
    <title>Highcharts Tutorial</title>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
    <script src="http://code.highcharts.com/highcharts.js"></script>
    <script src="http://code.highcharts.com/highcharts-more.js"></script>
    <script src="http://code.highcharts.com/modules/solid-gauge.js"></script>
</head>

<body>
    <div style="width: 600px; height: 400px; margin: 0 auto">
        <div id="container-speed" style="width: 300px; height: 200px; float: left"></div>
        <div id="container-rpm" style="width: 300px; height: 200px; float: left"></div>
    </div>
    <script language="JavaScript">
    $(document).ready(function() {
        var chart = {
            type: 'solidgauge'
        };
        var title = null;

        var pane = {
            center: ['50%', '85%'],
            size: '140%',
            startAngle: -90,
            endAngle: 90,
            background: {
                backgroundColor: (Highcharts.theme && Highcharts.theme.background2) || '#EEE',
                innerRadius: '60%',
                outerRadius: '100%',
                shape: 'arc'
            }
        };

        var tooltip = {
            enabled: false
        };

        // the value axis
        var yAxis = {
            stops: [
                [0.1, '#55BF3B'], // green
                [0.5, '#DDDF0D'], // yellow
                [0.9, '#DF5353'] // red
            ],
            lineWidth: 0,
            minorTickInterval: null,
            tickPixelInterval: 400,
            tickWidth: 0,
            title: {
                y: -70
            },
            labels: {
                y: 16
            },
            min: 0,
            max: 200,
            title: {
                text: 'Speed'
            }
        };

        var plotOptions = {
            solidgauge: {
                dataLabels: {
                    y: 5,
                    borderWidth: 0,
                    useHTML: true
                }
            }
        };

        var credits = {
            enabled: false
        };

        var series = [{
            name: 'Speed',
            data: [80],
            dataLabels: {
                format: '<div style="text-align:center"><span style="font-size:25px;color:' +
                    ((Highcharts.theme && Highcharts.theme.contrastTextColor) || 'black') + '">{y}</span><br/>' +
                    '<span style="font-size:12px;color:silver">km/h</span></div>'
            },
            tooltip: {
                valueSuffix: ' km/h'
            }
        }];

        var json = {};
        json.chart = chart;
        json.title = title;
        json.pane = pane;
        json.tooltip = tooltip;
        json.yAxis = yAxis;
        json.credits = credits;
        json.series = series;
        $('#container-speed').highcharts(json);


        // the value axis
        yAxis = {
            stops: [
                [0.1, '#55BF3B'], // green
                [0.5, '#DDDF0D'], // yellow
                [0.9, '#DF5353'] // red
            ],
            lineWidth: 0,
            minorTickInterval: null,
            tickPixelInterval: 400,
            tickWidth: 0,
            title: {
                y: -70
            },
            labels: {
                y: 16
            },
            min: 0,
            max: 5,
            title: {
                text: 'RPM'
            }
        };

        series = [{
            name: 'RPM',
            data: [1],
            dataLabels: {
                format: '<div style="text-align:center"><span style="font-size:25px;color:' +
                    ((Highcharts.theme && Highcharts.theme.contrastTextColor) || 'black') + '">{y:.1f}</span><br/>' +
                    '<span style="font-size:12px;color:silver">* 1000 / min</span></div>'
            },
            tooltip: {
                valueSuffix: ' revolutions/min'
            }
        }];

        json.yAxis = yAxis;
        json.series = series;
        $('#container-rpm').highcharts(json);

        var chartFunction = function() {
            // Speed
            var chart = $('#container-speed').highcharts();
            var point;
            var newVal;
            var inc;

            if (chart) {
                point = chart.series[0].points[0];
                inc = Math.round((Math.random() - 0.5) * 100);
                newVal = point.y + inc;

                if (newVal < 0 || newVal > 200) {
                    newVal = point.y - inc;
                }
                point.update(newVal);
            }

            // RPM
            chart = $('#container-rpm').highcharts();
            if (chart) {
                point = chart.series[0].points[0];
                inc = Math.random() - 0.5;
                newVal = point.y + inc;

                if (newVal < 0 || newVal > 5) {
                    newVal = point.y - inc;
                }

                point.update(newVal);
            }
        };

        // Bring life to the dials
        setInterval(chartFunction, 2000);
    });
    </script>
</body>

</html>

همونطور که میبینید در این نمونه علاوه بر فایل اصلی highcharts، دو فایل دیگه رو هم وارد کردیم. همچنین دو container قرار دادیم که در یکی از اونا نمودار مربوط به سرعت و در دیگری نمودار مربوط به دور در دقیقه نمایش داده بشه.

میبینید که در ابتدا کدی بصورت زیر قرار داده شده:

var chart = {
   type: 'solidgauge'
};

با استفاده از این کد، نوع نمودار رو بصورت اندازه گیر و توپر قرار دادیم.

var pane = {
   center: ['50%', '85%'],
   size: '140%',
   startAngle: -90,
   endAngle: 90,
   background: {
       backgroundColor: (Highcharts.theme && Highcharts.theme.background2) || '#EEE',
       innerRadius: '60%',
       outerRadius: '100%',
       shape: 'arc'
   }
};

با استفاده از کد بالا پس زمینه رو استایل دهی کردیم و با استفاده از ویژگی center، محل قرارگیری مرکز نمودار‌ها رو مشخص کردیم و سایز نمودارها رو هم برابر با 140 درصد در نظر گرفتیم تا بزرگتر بشه. میبینید که با استفاده از ویژگی‌های startAngle و endAngle هم شروع و پایان کیلومتر شمار رو مشخص کردیم که محدوده چرخش 180 درجه هست. با استفاده از ویژگی background هم مشخص کردیم که شکل کلی بصورت arc یا قوس و کمان باشه و شعاع داخلی %60 و شعاع خارجی رو برابر با %100 در نظر گرفتیم.

var yAxis = {
   stops: [
       [0.1, '#55BF3B'], // green
       [0.5, '#DDDF0D'], // yellow
       [0.9, '#DF5353'] // red
   ],
   lineWidth: 0,
   minorTickInterval: null,
   tickPixelInterval: 400,
   tickWidth: 0,
   title: {
       y: -70
   },
   labels: {
       y: 16
   },
   min: 0,
   max: 200,
   title: {
       text: 'Speed'
   }
};

var series = [{
   name: 'Speed',
   data: [80],
   dataLabels: {
       format: '<div style="text-align:center"><span style="font-size:25px;color:' +
           ((Highcharts.theme && Highcharts.theme.contrastTextColor) || 'black') + '">{y}</span><br/>' +
           '<span style="font-size:12px;color:silver">km/h</span></div>'
   },
   tooltip: {
       valueSuffix: ' km/h'
   }
}];

متغیرهای yAxis و series برای نمودار مربوط به سرعت در بالا اومدن. میبینید که در yAxis سه رنگ برای نمودار در نظر گرفته شده. حداقل و حداکثر رو بترتیب برابر با 0 و 200 قرار داده و درون متغیر series هم داده مورد نظر رو قرار داده و برای اون نام و فرمت label رو مشخص کرده.

yAxis = {
   stops: [
       [0.1, '#55BF3B'], // green
       [0.5, '#DDDF0D'], // yellow
       [0.9, '#DF5353'] // red
   ],
   lineWidth: 0,
   minorTickInterval: null,
   tickPixelInterval: 400,
   tickWidth: 0,
   title: {
       y: -70
   },
   labels: {
       y: 16
   },
   min: 0,
   max: 5,
   title: {
       text: 'RPM'
   }
};

series = [{
   name: 'RPM',
   data: [1],
   dataLabels: {
       format: '<div style="text-align:center"><span style="font-size:25px;color:' +
           ((Highcharts.theme && Highcharts.theme.contrastTextColor) || 'black') + '">{y:.1f}</span><br/>' +
           '<span style="font-size:12px;color:silver">* 1000 / min</span></div>'
   },
   tooltip: {
       valueSuffix: ' revolutions/min'
   }
}];

متغیرهای yAxis و series مربوط به نمودار دور بر دقیقه هم در بالا اومدن و ویژگی‌های اون رو مشخص کردن. میبینید که حداقل و حداکثر نمودار بترتیب 0 و 5 هست. در آخر هم برای روح بخشیدن به این نمودارها کد زیر رو قرار میدیم که هر چند لحظه یکبار یک عدد تصادفی رو جایگزین کنه و نمودار به روز رسانی بشه:

var chartFunction = function() {
   // Speed
   var chart = $('#container-speed').highcharts();
   var point;
   var newVal;
   var inc;

   if (chart) {
       point = chart.series[0].points[0];
       inc = Math.round((Math.random() - 0.5) * 100);
       newVal = point.y + inc;

       if (newVal < 0 || newVal > 200) {
           newVal = point.y - inc;
       }
       point.update(newVal);
   }

   // RPM
   chart = $('#container-rpm').highcharts();
   if (chart) {
       point = chart.series[0].points[0];
       inc = Math.random() - 0.5;
       newVal = point.y + inc;

       if (newVal < 0 || newVal > 5) {
           newVal = point.y - inc;
       }

       point.update(newVal);
   }
};

// Bring life to the dials
setInterval(chartFunction, 2000);

در نهایت خروجی بصورت زیر هست:guage solid highcharts

امیدوارم از این مطلب خوشتون اومده باشه.

موفق و پیروز باشید

یا علی

Source

چه امتیازی به این مقاله می دید؟
نویسنده محمد اسفندیاری
بسیار به طراحی وب علاقمندم و به سرعت در حال یادگیری تمام مباحث پیشرفته هستم و دوست دارم که به دیگران هم یاد بدهم.

جلسات دوره

نظرات کاربران

اولین دیدگاه این پست رو تو بنویس !

نیاز به لاگین

برای ارسال دیدگاه و یا پرسیدن سوال خود در این قسمت، باید در سایت لاگین شوید.