Gnuplot minimum and maximum boundaries for autoscaling

前端 未结 4 842
佛祖请我去吃肉
佛祖请我去吃肉 2020-12-31 09:05

How can I limit the autoscaling of gnuplot, so that, as example for the y-max, it is at least a certain value and it would autoscale up to fixed \"limit\"?

From loo

相关标签:
4条回答
  • 2020-12-31 09:23

    Since version 4.6 gnuplot offers a new syntax to specify upper and lower limits for the autoscaling. For your case you could use

    set xrange [0:100 < * < 1000]
    

    Quoting from the documentation:

    The range in which autoscaling is being performed may be limited by a lower bound <lb> or an upper bound <ub> or both. The syntax is

    { <lb> < } * { < <ub> }
    

    For example

    0 < * < 200
    

    sets <lb> = 0 and <ub> = 200.

    That syntax can be applied to both the minimum or maximum value of set *range.

    To autoscale xmin but keeping it positive, use

    set xrange [0<*:]
    

    To autoscale x but keep minimum range of 10 to 50:

    set xrange [*<10:50<*]
    

    See the documentation about set xrange for more information.

    0 讨论(0)
  • 2020-12-31 09:25

    In this case, you could filter the data and let gnuplot do it's normal auto-scaling:

    set yrange [*:*]
    plot 'mydatafile' u 1:(($2 >= YMIN && $2 <= YMAX) ? $2 : 1/0)
    
    0 讨论(0)
  • 2020-12-31 09:30

    Since people seem to be interested in this question, I'll add the way I solved this as an answer:

    I made the minimum for the autoscaling by inserting a invisible marker in the beginning of the data. That cause the plot to always "show" it, even though it can not bee seen.

    Then I implemented the maximum outside of gnuplot (propably could have been possible inside it as well, take a look at mgilson's answer), in a parser script that I have used to prepare the data for gnuplot.

    Actually in the script I took all the "clipped out" values, added them to y=0, and made them red. That way I get a "warning", of values being too big to be sensible to graph. (My program monitors pings between two hosts, and there is no sense trying to graph 5s+ latencies => I mark it as connection broken)

    0 讨论(0)
  • 2020-12-31 09:44

    I don't think it is possible, either you have autoscaling on no-, min- or max-, or both axis i.e.:

    set yrange [FIXED_MIN : FIXED_MAX]
    set yrange [        * : FIXED_MAX]
    set yrange [FIXED_MIN :         *]
    set yrange [        * :          ]
    

    Respectively.

    0 讨论(0)
提交回复
热议问题