3

gnu プロットで 90 パーセンタイルをマークする方法。サンプルが必要

plot [][] "fle.txt" using 1:2 with lines

これは、グラフをプロットする方法です。グラフの 90% をマークしたいです。これが私のデータ セットです。

time(seconds)  frequency  cumulativeFrequency
10             2          2
11             6          8
12             8          16
13             10         26
14             7          33
15             5          38
16             5          43
17             4          47
18             2          49
4

2 に答える 2

5

gnuplotだけでこれを行う方法はわかりませんが、python-を使用して行うのは難しくありません

# percent90.py
import sys
def to_num(iterable):
    for line in iterable:
        columns = line.split()  # split into columns
        if not columns:  # empty line
            continue
        try:
            yield float(columns[1])  # This is a good number -- Yield it and keep going
        except ValueError:  # Not a number on the line
            pass            # just keep going -- do nothing
        except IndexError:
            print line

with open(sys.argv[1]) as fin:
     data = sorted(to_num(fin))

top_10 = data[int(len(data)*0.9):]  #top 10 percent of the data
print(top_10[0])

これは次のように呼び出すことができます:

python percent90.py path/to/datafile

これにより、マークを配置する場所がわかります。それをマークすることに関しては、私はおそらくgnuplotでこのようなことをするでしょう:

YVAL = `python percent90.py path/to/datafile`
set arrow 1 from graph 0,first YVAL to graph 1,first YVAL ls 1 nohead front
于 2013-01-31T13:52:10.863 に答える
3

データの 90% ポイントを計算したいだけの場合、これはstatsorplotコマンドと gnuplot の内部変数を使用して実行でき、mgilson が提案したように線を引きます。

#!/usr/bin/env gnuplot

set terminal png
set output 'test.png'

# 'every ::1' skips header
stats 'fle.txt' every ::1 

mark = (STATS_max_y - STATS_min_y)*0.9 + STATS_min_y

set arrow 1 from graph 0,first mark to graph 1,first mark ls 1 nohead front

plot 'fle.txt' every ::1

このスクリプトは、次の出力を生成します。

ここに画像の説明を入力

于 2013-01-31T14:28:05.467 に答える