How do I get gnuplot to read my time format and keep the times in order of the input file?





.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}







0















I'm trying to get gnuplot to (a) read my input time format and (b) plot the time in order of the input file. I'm trying to plot changes to a value over the past 24 hours starting at 18 UTC.



It doesn't appear to like:



set xdata time

set timefmt "%H%M"


It also likes to plot my xaxis values from 0000 UTC to 2300 UTC and drops leading zeros. See below for input file. I would like the newest data (1800UTC in this case) to be on the right side of my xaxis. Thanks.



1900 23

2000 22

2100 22

2200 22

2300 22

0000 22

0100 22

0200 21

0300 21

0400 21

0500 21


and so on...










share|improve this question

























  • You can do this only by adding additional information about date: year, month, day. Because gnuplot doesn't know what is "0000", is that the next day or the current one.

    – Michael O.
    Jan 4 at 12:51


















0















I'm trying to get gnuplot to (a) read my input time format and (b) plot the time in order of the input file. I'm trying to plot changes to a value over the past 24 hours starting at 18 UTC.



It doesn't appear to like:



set xdata time

set timefmt "%H%M"


It also likes to plot my xaxis values from 0000 UTC to 2300 UTC and drops leading zeros. See below for input file. I would like the newest data (1800UTC in this case) to be on the right side of my xaxis. Thanks.



1900 23

2000 22

2100 22

2200 22

2300 22

0000 22

0100 22

0200 21

0300 21

0400 21

0500 21


and so on...










share|improve this question

























  • You can do this only by adding additional information about date: year, month, day. Because gnuplot doesn't know what is "0000", is that the next day or the current one.

    – Michael O.
    Jan 4 at 12:51














0












0








0








I'm trying to get gnuplot to (a) read my input time format and (b) plot the time in order of the input file. I'm trying to plot changes to a value over the past 24 hours starting at 18 UTC.



It doesn't appear to like:



set xdata time

set timefmt "%H%M"


It also likes to plot my xaxis values from 0000 UTC to 2300 UTC and drops leading zeros. See below for input file. I would like the newest data (1800UTC in this case) to be on the right side of my xaxis. Thanks.



1900 23

2000 22

2100 22

2200 22

2300 22

0000 22

0100 22

0200 21

0300 21

0400 21

0500 21


and so on...










share|improve this question
















I'm trying to get gnuplot to (a) read my input time format and (b) plot the time in order of the input file. I'm trying to plot changes to a value over the past 24 hours starting at 18 UTC.



It doesn't appear to like:



set xdata time

set timefmt "%H%M"


It also likes to plot my xaxis values from 0000 UTC to 2300 UTC and drops leading zeros. See below for input file. I would like the newest data (1800UTC in this case) to be on the right side of my xaxis. Thanks.



1900 23

2000 22

2100 22

2200 22

2300 22

0000 22

0100 22

0200 21

0300 21

0400 21

0500 21


and so on...







gnuplot






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Jan 4 at 0:17









Nick

38.9k132443




38.9k132443










asked Jan 4 at 0:14









Justin PattenJustin Patten

1




1













  • You can do this only by adding additional information about date: year, month, day. Because gnuplot doesn't know what is "0000", is that the next day or the current one.

    – Michael O.
    Jan 4 at 12:51



















  • You can do this only by adding additional information about date: year, month, day. Because gnuplot doesn't know what is "0000", is that the next day or the current one.

    – Michael O.
    Jan 4 at 12:51

















You can do this only by adding additional information about date: year, month, day. Because gnuplot doesn't know what is "0000", is that the next day or the current one.

– Michael O.
Jan 4 at 12:51





You can do this only by adding additional information about date: year, month, day. Because gnuplot doesn't know what is "0000", is that the next day or the current one.

– Michael O.
Jan 4 at 12:51












1 Answer
1






active

oldest

votes


















1














the suggestion from Michael O. to use a complete date with year, month, day is probably the most versatile way to handle your topic.
However, if you cannot or don't want to change your data you could use the following:



Solution 1: add an extra day (or 86400 seconds) when data passes "0000"



Solution 2: use the first column as string label (x-axis will only be scaled correctly if your timesteps are constant). For fun, I added the possiblity to display only a part of the labels.



### time "without" date
reset session

$Data <<EOD
1900 23
2000 22
2100 22
2200 22
2300 22
0000 22
0100 22
0200 21
0300 21
0400 21
0500 21
EOD

set multiplot layout 2,1

# solution 1: add extra day
set xdata time
set timefmt "%H%M"
set format x "%H%M"
extraday = 0
plot $Data u ($1==0000 ? extraday = extraday + 1 : 0, timecolumn(1)+extraday*86400):2 w lp lt 7 lc rgb "red" title "add extra day"

# solution 2: use timecolumn as xticlabel
Modulo(x,n) = x - floor(x/n)*n
plot $Data u 0:2:xticlabels(Modulo($1,200) == 0 ? stringcolumn(1) : "") w lp lt 7 lc rgb "green" title "timecolumn as xticlabel"

unset multiplot
### end of code


...will result in:



enter image description here






share|improve this answer
























    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54031572%2fhow-do-i-get-gnuplot-to-read-my-time-format-and-keep-the-times-in-order-of-the-i%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    1














    the suggestion from Michael O. to use a complete date with year, month, day is probably the most versatile way to handle your topic.
    However, if you cannot or don't want to change your data you could use the following:



    Solution 1: add an extra day (or 86400 seconds) when data passes "0000"



    Solution 2: use the first column as string label (x-axis will only be scaled correctly if your timesteps are constant). For fun, I added the possiblity to display only a part of the labels.



    ### time "without" date
    reset session

    $Data <<EOD
    1900 23
    2000 22
    2100 22
    2200 22
    2300 22
    0000 22
    0100 22
    0200 21
    0300 21
    0400 21
    0500 21
    EOD

    set multiplot layout 2,1

    # solution 1: add extra day
    set xdata time
    set timefmt "%H%M"
    set format x "%H%M"
    extraday = 0
    plot $Data u ($1==0000 ? extraday = extraday + 1 : 0, timecolumn(1)+extraday*86400):2 w lp lt 7 lc rgb "red" title "add extra day"

    # solution 2: use timecolumn as xticlabel
    Modulo(x,n) = x - floor(x/n)*n
    plot $Data u 0:2:xticlabels(Modulo($1,200) == 0 ? stringcolumn(1) : "") w lp lt 7 lc rgb "green" title "timecolumn as xticlabel"

    unset multiplot
    ### end of code


    ...will result in:



    enter image description here






    share|improve this answer




























      1














      the suggestion from Michael O. to use a complete date with year, month, day is probably the most versatile way to handle your topic.
      However, if you cannot or don't want to change your data you could use the following:



      Solution 1: add an extra day (or 86400 seconds) when data passes "0000"



      Solution 2: use the first column as string label (x-axis will only be scaled correctly if your timesteps are constant). For fun, I added the possiblity to display only a part of the labels.



      ### time "without" date
      reset session

      $Data <<EOD
      1900 23
      2000 22
      2100 22
      2200 22
      2300 22
      0000 22
      0100 22
      0200 21
      0300 21
      0400 21
      0500 21
      EOD

      set multiplot layout 2,1

      # solution 1: add extra day
      set xdata time
      set timefmt "%H%M"
      set format x "%H%M"
      extraday = 0
      plot $Data u ($1==0000 ? extraday = extraday + 1 : 0, timecolumn(1)+extraday*86400):2 w lp lt 7 lc rgb "red" title "add extra day"

      # solution 2: use timecolumn as xticlabel
      Modulo(x,n) = x - floor(x/n)*n
      plot $Data u 0:2:xticlabels(Modulo($1,200) == 0 ? stringcolumn(1) : "") w lp lt 7 lc rgb "green" title "timecolumn as xticlabel"

      unset multiplot
      ### end of code


      ...will result in:



      enter image description here






      share|improve this answer


























        1












        1








        1







        the suggestion from Michael O. to use a complete date with year, month, day is probably the most versatile way to handle your topic.
        However, if you cannot or don't want to change your data you could use the following:



        Solution 1: add an extra day (or 86400 seconds) when data passes "0000"



        Solution 2: use the first column as string label (x-axis will only be scaled correctly if your timesteps are constant). For fun, I added the possiblity to display only a part of the labels.



        ### time "without" date
        reset session

        $Data <<EOD
        1900 23
        2000 22
        2100 22
        2200 22
        2300 22
        0000 22
        0100 22
        0200 21
        0300 21
        0400 21
        0500 21
        EOD

        set multiplot layout 2,1

        # solution 1: add extra day
        set xdata time
        set timefmt "%H%M"
        set format x "%H%M"
        extraday = 0
        plot $Data u ($1==0000 ? extraday = extraday + 1 : 0, timecolumn(1)+extraday*86400):2 w lp lt 7 lc rgb "red" title "add extra day"

        # solution 2: use timecolumn as xticlabel
        Modulo(x,n) = x - floor(x/n)*n
        plot $Data u 0:2:xticlabels(Modulo($1,200) == 0 ? stringcolumn(1) : "") w lp lt 7 lc rgb "green" title "timecolumn as xticlabel"

        unset multiplot
        ### end of code


        ...will result in:



        enter image description here






        share|improve this answer













        the suggestion from Michael O. to use a complete date with year, month, day is probably the most versatile way to handle your topic.
        However, if you cannot or don't want to change your data you could use the following:



        Solution 1: add an extra day (or 86400 seconds) when data passes "0000"



        Solution 2: use the first column as string label (x-axis will only be scaled correctly if your timesteps are constant). For fun, I added the possiblity to display only a part of the labels.



        ### time "without" date
        reset session

        $Data <<EOD
        1900 23
        2000 22
        2100 22
        2200 22
        2300 22
        0000 22
        0100 22
        0200 21
        0300 21
        0400 21
        0500 21
        EOD

        set multiplot layout 2,1

        # solution 1: add extra day
        set xdata time
        set timefmt "%H%M"
        set format x "%H%M"
        extraday = 0
        plot $Data u ($1==0000 ? extraday = extraday + 1 : 0, timecolumn(1)+extraday*86400):2 w lp lt 7 lc rgb "red" title "add extra day"

        # solution 2: use timecolumn as xticlabel
        Modulo(x,n) = x - floor(x/n)*n
        plot $Data u 0:2:xticlabels(Modulo($1,200) == 0 ? stringcolumn(1) : "") w lp lt 7 lc rgb "green" title "timecolumn as xticlabel"

        unset multiplot
        ### end of code


        ...will result in:



        enter image description here







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Jan 4 at 19:37









        theozhtheozh

        1,597312




        1,597312
































            draft saved

            draft discarded




















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54031572%2fhow-do-i-get-gnuplot-to-read-my-time-format-and-keep-the-times-in-order-of-the-i%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Mossoró

            Error while reading .h5 file using the rhdf5 package in R

            Pushsharp Apns notification error: 'InvalidToken'