كيف يمكنني رسم سلسلة الرسم البياني الوقت مع بيرل؟

StackOverflow https://stackoverflow.com/questions/1600551

  •  05-07-2019
  •  | 
  •  

سؤال

ولدي بعض البيانات من قاعدة بيانات (سكليتي)، ورسم خرائط قيمة (عدد صحيح) إلى تاريخ. والتاريخ هو سلسلة مع هذا التنسيق: YYYY-MM-DD hh:mm. لم يتم توزيعها بشكل موحد التواريخ. أريد لا رسم خط الرسم البياني مع التواريخ X والقيم على Y. ما هو أسهل طريقة للقيام بذلك مع بيرل؟

دبيكس :: الهيكل ولكن لم أستطع جعلها تعترف تواريخي . كما أنني حاولت GD :: الرسم البياني ، ولكن كما تقول الوثائق:

<اقتباس فقرة>   

وGD :: الرسم البياني لا يدعم س العددي   محور بالطريقة التي ينبغي. البيانات لX   محاور يجب أن تكون متباعدة بالتساوي

هل كانت مفيدة؟

المحلول

ويمكنك دفع gnuplot باستخدام <لأ href = "http://search.cpan.org/perldoc / الرسم البياني :: Gnuplot "يختلط =" noreferrer "> الرسم البياني :: Gnuplot .

وبدلا من ذلك، إذا SVG هو تنسيق الإخراج مقبول، هناك SVG :: TT :: الرسم البياني .

نصائح أخرى

ويمكنك استخدام الرسم البياني :: الفرس ومحور :: التاريخ والوقت:

#!/usr/local/bin/perl -w
use strict;
use Chart::Clicker;
use Chart::Clicker::Axis::DateTime;
use Chart::Clicker::Data::Series;
use Chart::Clicker::Data::DataSet;
use Chart::Clicker::Renderer::Point;

my $cc = Chart::Clicker->new;
my $series = Chart::Clicker::Data::Series->new(
    values    => [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ],
    keys      => [
        1256147117, 1256148117, 1256149117, 1256150117, 1256151117, 1256152117,
        1256153117, 1256154117, 1256155117, 1256156117
    ],
);
my $ctx = $cc->get_context('default');
$ctx->domain_axis(Chart::Clicker::Axis::DateTime->new(position => 'bottom', orientation     => 'horizontal'));
my $ds = Chart::Clicker::Data::DataSet->new(series => [ $series ]);
$cc->add_to_datasets($ds);
$cc->write_output('foo.png');

لديك لتحويل مرات الخاص بك إلى الطوابع يونيكس، ولكنها DWIMs.

<اقتباس فقرة>   

وحاولت دبيكس :: مخطط لكنني لا يمكن أن تجعل من الاعتراف تواريخي.

هل حاولت أن تترجم التواريخ ليونكس الطوابع واستخدامها مواعيد X؟

وهذا لا حيلة لي:

my $ctx = $chart->get_context('default');
$ctx->domain_axis(
    Chart::Clicker::Axis::DateTime->new(
        position        => 'bottom',
        orientation     => 'horizontal',
        ticks           => 5 ,
        format          => "%Y-%m-%d"
    )
);

وأسهل طريقة وجدتها للقيام بذلك مع بيرل هي استخدام بيرل لتشغيل عملية gnuplot. يمكنك استخدام set timefmt x "%Y-%m-%d" وسوف تلقائيا تحليل البيانات في شكل لديك. Gnuplot كما يدعم مجموعة متنوعة من تنسيقات الإخراج.

وأوصي تطبيع التواريخ والأعداد الصحيحة. ان طريقة القوة الغاشمة يكون بالطبع باستخدام ثواني الحقبة، ولكن هذا قد لا تبدو لطيفة جدا على الرسم البياني، لذلك تطبيع من قبل الخطية تتحول إلى بعض طائفة كريمة (لا أستطيع تقديم تفاصيل عن الكيفية إذا رغبت في ذلك).

هل تحتاج إلى الرسم البياني الخاص بك إلى أن تتولد في الوقت الحقيقي، أو هو لتقرير لمرة واحدة؟ إذا كان هذا الأخير، ثم يمكنك استخدام وحدات التاريخ والوقت لإنشاء قيم اكسل والرسم البياني لهم في Excel (أو نظيره مفتوح المصدر لها).

use DateTime::Format::MySQL;
use DateTime::Format::Excel;

my $dt = DateTime::Format::MySQL->parse_datetime( '2003-01-16 23:12:01' );
print $dt, "\n";
my $daynum = DateTime::Format::Excel->format_datetime($dt);
print $daynum, "\n";

ومنذ وقت فعلت شيئا من هذا القبيل باستخدام الخط المقارب . وهي مجموعة لا تصدق، ولكنها ليست سهلة الاستخدام.

وفيما يلي لا تعمل في SQLLite كما لا يتم اعتماد الاستعلامات العودية، ولكنها ستعمل في أوراكل.

ويمكنك إنشاء سلسلة زمنية متواصلة لأوراكل DBS مع فرعي مثل هذا:

(SELECT   TRUNC (SYSDATE - x / 1440, 'MI') ts
             FROM   (SELECT       LEVEL x
                           FROM   DUAL
                     CONNECT BY   LEVEL <= 60))

وبعد ذلك ربط هذه السلسلة من الوقت لتخطيط البيانات الخاصة بك باستخدام LEFT JOIN مثل هذا:

    SELECT   TO_CHAR (A.TS, 'DD/MM/YYYY HH24:MI') TS
        , b.DATAPOINT1, b.DATAPOINT2
   FROM   (SELECT   TRUNC (SYSDATE - x / 1440, 'MI') ts
             FROM   (SELECT       LEVEL x
                           FROM   DUAL
                     CONNECT BY   LEVEL <= 60)) a
        , MY_CHART_DATA b
  WHERE   a.ts = b.ts(+) ORDER BY   a.TS;

والمثال أعلاه سوف مؤامرة الدقائق الأخيرة 60 وستعمل ** مع دبيكس :: الرسم البياني. لتغيير قرار لساعات التغيير "MI 'إلى' HH24، أو كل 24 ساعة يمكنك حذف المعلمة تنسيق التاريخ معا.

لتغيير نطاق ببساطة تعيين CONNECT BY قيمة LEVEL إلى عدد من النقاط السلاسل الزمنية تحتاج إلى رسم في القرار الخاص المحدد.

و** ملاحظة: سوف دبيكس :: مخطط شبكة الزعيم إذا كان كل القيم DATAPOINT صفر (أي غير محددة). لا يمكن أن تساعدك هناك، آسف.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top