خطوط الاتجاه

نظرة عامة

خط الاتجاه هو خط متراكب على مخطط يكشف عن الاتجاه العام للبيانات. يمكن لمخططات Google إنشاء خطوط اتجاه تلقائيًا للمخططات المبعثرة والرسوم البيانية الشريطية والمخططات العمودية والرسوم البيانية الخطية.

تدعم مخططات Google ثلاثة أنواع من خطوط الاتجاه: الخطي ومتعدد الحدود والأسي.

خطوط الاتجاه الخطية

خط الاتجاه الخطي هو الخط المستقيم الذي يقرّب تقريبًا البيانات الواردة في الرسم البياني. (للتعبير عن الدقة، يعد الخط الذي يقلل من مجموع المسافات التربيعية من كل نقطة إليه.)

في الرسم البياني أدناه، يمكنك رؤية خط اتجاه خطي على مخطط مبعثر يقارن بين عمر شجرة القيقب السكّري وقطر جذوعها. يمكنك تمرير مؤشر الماوس فوق خط الاتجاه لرؤية المعادلة التي تم حسابها بواسطة مخططات Google: 4.885 مضروبًا في القطر + 0.730.

لرسم خط اتجاه على رسم بياني، استخدِم الخيار trendlines وحدِّد سلسلة البيانات التي يجب استخدامها:

google.charts.setOnLoadCallback(drawChart);
function drawChart() {
  var data = google.visualization.arrayToDataTable([
    ['Diameter', 'Age'],
    [8, 37], [4, 19.5], [11, 52], [4, 22], [3, 16.5], [6.5, 32.8], [14, 72]]);

  var options = {
    title: 'Age of sugar maples vs. trunk diameter, in inches',
    hAxis: {title: 'Diameter'},
    vAxis: {title: 'Age'},
    legend: 'none',
    trendlines: { 0: {} }    // Draw a trendline for data series 0.
  };

  var chart = new google.visualization.ScatterChart(document.getElementById('chart_div'));
  chart.draw(data, options);
}

خطوط الاتجاه الخطية هي النوع الأكثر شيوعًا من خطوط الاتجاه. ولكن في بعض الأحيان يكون المنحنى هو الأفضل لوصف البيانات، ولهذا سنحتاج إلى نوع آخر من خطوط الاتجاه.

خطوط الاتجاه الأسّية

إذا كان أفضل شرح لبياناتك هو أس للشكل eax+b، يمكنك استخدام السمة type لتحديد خط اتجاه أسي، كما هو موضّح أدناه:

ملاحظة: على عكس خطوط الاتجاه الخطية، هناك عدة طرق مختلفة لحساب خطوط الاتجاه الأسّية. نحن نقدم طريقة واحدة فقط في الوقت الحالي، ولكننا سندعم المزيد في المستقبل، وبالتالي من الممكن أن يتغير اسم خط الاتجاه الأسي الحالي أو سلوكه.

بالنسبة إلى هذا الرسم البياني، نستخدم أيضًا visibleInLegend: true لعرض منحنى الأس في وسيلة الإيضاح.

google.charts.setOnLoadCallback(drawChart);
function drawChart() {
  var data = google.visualization.arrayToDataTable([
    ['Generation', 'Descendants'],
    [0, 1], [1, 33], [2, 269], [3, 2013]
 ]);

  var options = {
    title: 'Descendants by Generation',
    hAxis: {title: 'Generation', minValue: 0, maxValue: 3},
    vAxis: {title: 'Descendants', minValue: 0, maxValue: 2100},
    trendlines: {
      0: {
        type: 'exponential',
        visibleInLegend: true,
      }
    }
  };

  var chart = new google.visualization.ScatterChart(document.getElementById('chart_div2'));
  chart.draw(data, options);
}

تغيير اللون

بشكل افتراضي، يتم تلوين خطوط الاتجاه بنفس لون سلسلة البيانات، ولكنها أفتح. يمكنك إلغاء ذلك باستخدام السمة color. هنا، نرسم مخططًا لعدد أرقام باي التي تم حسابها بالسنة خلال فترة مثمرة حسابيًا، وتلوين خط الاتّجاه باللون الأخضر.

إليك مواصفات خطوط الاتجاه:

    trendlines: {
      0: {
        type: 'exponential',
        color: 'green',
      }
    }

خطوط الاتجاه المتعددة الحدود

لإنشاء خط اتجاه متعدد الحدود، حدد النوع polynomial والنوع degree. استخدمها بحذر، لأنها يمكن أن تؤدي في بعض الأحيان إلى نتائج مضللة. في المثال أدناه، حيث يتم رسم مجموعة بيانات خطية تقريبًا باستخدام خط اتجاه مكعّب (درجة 3):

لاحظ أن الانخفاض بعد آخر نقطة بيانات لا يظهر إلا لأننا قمنا بتوسيع المحور الأفقي بشكل مصطنع إلى 15. بدون تعيين hAxis.maxValue على 15، سيبدو كما يلي:

نفس البيانات، نفس متعدد الحدود، نافذة مختلفة على البيانات.

الخيارات
  var options = {
    title: 'Age vs. Weight comparison',
    legend: 'none',
    crosshair: { trigger: "both", orientation: "both" },
    trendlines: {
      0: {
        type: 'polynomial',
        degree: 3,
        visibleInLegend: true,
      }
    }
  };
رمز HTML الكامل
<html>
 <head>
   <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
   <script type="text/javascript">
     google.charts.load("current", {packages:["corechart"]});
     google.charts.setOnLoadCallback(drawChart);
     function drawChart() {
       var data = google.visualization.arrayToDataTable([
         ['Age', 'Weight'],
         [ 8,      12],
         [ 4,      5.5],
         [ 11,     14],
         [ 4,      5],
         [ 3,      3.5],
         [ 6.5,    7]
       ]);

       var options = {
         title: 'Age vs. Weight comparison',
         legend: 'none',
         crosshair: { trigger: 'both', orientation: 'both' },
         trendlines: {
           0: {
             type: 'polynomial',
             degree: 3,
             visibleInLegend: true,
           }
         }
       };

       var chart = new google.visualization.ScatterChart(document.getElementById('polynomial2_div'));
       chart.draw(data, options);
     }
   </script>
 </head>
 <body>
  <div id='polynomial2_div' style='width: 900px; height: 500px;'></div>
 </body>
</html>

تغيير التعتيم وعرض الخط

يمكنك تغيير مدى شفافية خط الاتجاه من خلال ضبط opacity على قيمة بين 0.0 و1.0، وضبط خيار "lineWidth" على عرض الخط.

    trendlines: {
      0: {
        color: 'purple',
        lineWidth: 10,
        opacity: 0.2,
        type: 'exponential'
      }
    }

سيكون الخيار lineWidth كافيًا لمعظم الاستخدامات، ولكن إذا أعجبك الشكل، هناك خيار pointSize يمكن استخدامه لتخصيص حجم النقاط القابلة للاختيار داخل خط الاتجاه:

مثلما هو الحال مع الضوء في الوقت نفسه الموجة والجسيم، فإن خط الاتجاه عبارة عن خط ومجموعة من النقاط. ما يراه المستخدمون يعتمد على كيفية تفاعلهم معه: عادةً ما يكون خطًا، ولكن عندما يمررون الماوس فوق خط الاتجاه، سيتم تمييز نقطة معينة. سيكون لهذه النقطة قُطر يساوي:

  • خط الاتجاه pointSize إذا تم تحديده، غير ذلك...
  • السمة pointSize العامة إذا تم تحديدها، غير ذلك...
  • 7

أمّا إذا تم ضبط الخيار "عام" أو "خط الاتجاه" pointSize، فسيتم عرض جميع النقاط القابلة للاختيار، بغض النظر عن lineWidth لخط الاتجاه.

الخيارات
  var options = {
    legend: 'none',
    hAxis: { ticks: [] },
    vAxis: { ticks: [] },
    pointShape: 'diamond',
    trendlines: {
      0: {
        type: 'polynomial',
        degree: 3,
        visibleInLegend: true,
        pointSize: 20, // Set the size of the trendline dots.
	opacity: 0.1
      }
    }
  };
رمز HTML الكامل
<html>
  <head>
  <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
  <script type="text/javascript">
    google.charts.load("current", {packages:["corechart"]});
    google.charts.setOnLoadCallback(drawChart);
      function drawChart() {
        var data = google.visualization.arrayToDataTable([
          ['X', 'Y'],
          [0, 4],
          [1, 2],
          [2, 4],
          [3, 6],
          [4, 4]
        ]);

        var options = {
          legend: 'none',
          hAxis: { ticks: [] },
          vAxis: { ticks: [] },
          colors: ['#703583'],
          pointShape: 'diamond',
          trendlines: {
            0: {
              type: 'polynomial',
              degree: 3,
              visibleInLegend: true,
              pointSize: 20, // Set the size of the trendline dots.
              opacity: 0.1
            }
          }
      };

      var chart = new google.visualization.ScatterChart(document.getElementById('chart_pointSize'));

      chart.draw(data, options);
    }
    </script>
  </head>
  <body>
    <div id="chart_pointSize" style="width: 900px; height: 500px;"></div>
  </body>
</html>

توضيح النقاط

يتم إنشاء خطوط الاتجاه عن طريق ختم مجموعة من النقاط على المخطط. يحدّد خيار pointsVisible لخط الاتجاه ما إذا كانت النقاط لخط اتجاه معيّن مرئية أم لا. يُعد true الخيار التلقائي لكل خطوط الاتجاه، ولكن إذا أردت إيقاف ظهور النقاط لخط الاتجاه الأول، اضبط trendlines.0.pointsVisible: false.

يوضح الرسم البياني أدناه التحكّم في مستوى ظهور النقاط حسب كل اتجاه.

الخيارات
        var options = {
          height: 500,
          legend: 'none',
          colors: ['#9575cd', '#33ac71'],
          pointShape: 'diamond',
          trendlines: {
            0: {
              type: 'exponential',
              pointSize: 20,
              opacity: 0.6,
              pointsVisible: false
            },
            1: {
              type: 'linear',
              pointSize: 10,
              pointsVisible: true
            }
          }
        };
    
رمز HTML الكامل
<html>
  <head>
    <meta charset="utf-8"/>
    <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
    <script type="text/javascript">
      google.charts.load('current', {packages:['corechart']});
      google.charts.setOnLoadCallback(drawChart);

      function drawChart() {
        var data = google.visualization.arrayToDataTable([
          ['X', 'Y', 'Z'],
          [0, 4, 5],
          [1, 2, 6],
          [2, 4, 8],
          [3, 6, 10],
          [4, 4, 11],
          [5, 8, 13],
          [6, 12, 15],
          [7, 15, 19],
          [8, 25, 21],
          [9, 34, 23],
          [10, 50, 27]
        ]);

        var options = {
          height: 500,
          legend: 'none',
          colors: ['#9575cd', '#33ac71'],
          pointShape: 'diamond',
          trendlines: {
            0: {
              type: 'exponential',
              pointSize: 20,
              opacity: 0.6,
              pointsVisible: false
            },
            1: {
              type: 'linear',
              pointSize: 10,
              pointsVisible: true
            }
          }
        };

        var chart = new google.visualization.ScatterChart(document.getElementById('chart_div'));

        chart.draw(data, options);
      }
    </script>
  </head>
  <body>
    <div id="chart_div"></div>
  </body>
</html>

    

تغيير التصنيف

وإذا اخترت visibleInLegend، ستظهر التسمية تلقائيًا معادلة خط الاتجاه. يمكنك استخدام labelInLegend لتحديد تصنيف مختلف. ويتم هنا عرض خط اتّجاه لكل سلسلتَين، مع ضبط التسميات في السلسلة النهائية على "خط الخطأ" (للسلسلة 0) و "خط الاختبار" (السلسلة 1).

    trendlines: {
      0: {
        labelInLegend: 'Bug line',
        visibleInLegend: true,
      },
      1: {
        labelInLegend: 'Test line',
        visibleInLegend: true,
      }
    }

الارتباطات

معامل التحديد، المسمى R2 في الإحصاءات، يحدد مدى تطابق خط الاتجاه مع البيانات. الارتباط المثالي هو 1.0، والارتباط المثالي هو 0.0.

يمكنك تصوير R2 في وسيلة الإيضاح للرسم البياني عن طريق تعيين خيار showR2 على true.

<html>
  <head>
    <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
    <script type="text/javascript">
      google.charts.load('current', {'packages':['corechart']});
      google.charts.setOnLoadCallback(drawChart);
      function drawChart() {
        var data = google.visualization.arrayToDataTable([
          ['Age', 'Weight'],
          [ 8,      12],
          [ 4,      5.5],
          [ 11,     14],
          [ 4,      5],
          [ 3,      3.5],
          [ 6.5,    7]
        ]);

        var options = {
          hAxis: {minValue: 0, maxValue: 15},
          vAxis: {minValue: 0, maxValue: 15},
          chartArea: {width:'50%'},
          trendlines: {
            0: {
              type: 'linear',
              showR2: true,
              visibleInLegend: true
            }
          }
        };

        var chartLinear = new google.visualization.ScatterChart(document.getElementById('chartLinear'));
        chartLinear.draw(data, options);

        options.trendlines[0].type = 'exponential';
        options.colors = ['#6F9654'];

        var chartExponential = new google.visualization.ScatterChart(document.getElementById('chartExponential'));
        chartExponential.draw(data, options);
      }
    </script>
  </head>
  <body>
    <div id="chartLinear" style="height: 350px; width: 800px"></div>
    <div id="chartExponential" style="height: 350px; width: 800px"></div>
  </body>
</html>