gnuplot を使って、両軸に対数スケールのヒストグラムを描かなければなりません。ビンは log10 で等間隔に並んでいる必要があります。y 軸で対数スケールを使用することは問題ありません。主な問題は x 軸のビンを作成することです。例えば、log10で10のビンを使う場合、最初のビンは[1],[2],[3]......[10 - 19][20 - 29]......[100 190] といった具合になるでしょうか?ネットで検索してみましたが、実用的な解決策は見つかりませんでした。もし gnuplot でそれを実現するのがあまりに面倒なら、 他のソフトウェアや言語を提案してもらえませんか。
誰かが質問したので、私が何をしなければならないか、 より具体的に説明します。私はこのような (巨大な) リストを持っています。
1 14000000
2 7000000
3 6500000
.
.
.
.
6600 1
8900 1
15000 1
19000 1
例えば、1400万個のIPアドレスが1パケットを送信し、700万個が2パケットを送信し......。1つのIPアドレスが6600パケット、....1つのIPアドレスが6600パケット、...、1つのIPアドレスが19000パケットを送信しています。見てわかるように、両軸の値はかなり高いので、対数スケールでないとプロットできません。
高速に処理する必要があったので、最初に試したことは、このリストをそのまま gnuplot で描画し、両軸にボックスを使って logscale を設定することでした。結果は理解できるものでしたが、あまり適切ではありませんでした。実際、x 軸の右側に行くに従ってボックスはどんどん薄くなっていきました。というのも、明らかに10-100の方が1-10よりもポイントが多いからです!そのため、2番目の10年後には本当に混乱してしまいました。
GnuPlot で対数スケールでプロットすることは、このスレッドの他の投稿とは逆に、完全に可能です。
GnuPlot では set logscale
というコマンドで log-log スケールを設定することができます。
そして、x 軸と y 軸の両方が正の値 (厳密に 0 でない値) であるファイルを持っていることが前提になります。例えば、以下のようなファイルは有効なファイルです。
1 0.5
2 0.2
3 0.15
4 0.05
log-logスケールを設定した後、コマンドでファイルをプロットすることができます。 plot "file.txt" w p` ここで、file.txt はもちろんファイルの名前です。このコマンドは点での出力を生成します。
また、ボックスのプロットは厄介で、おそらく推奨されないことに注意してください。まず、set xrange [1:4]
というコマンドで x-range を制限し、それからボックスで描画しなければなりません。そうしないと、x-range が不定であるときにエラーが返されます。この場合、plot は (適切な x 値に対して) いくつかのボックスのサイズが log(0) であることを要求していると思いますが、これはもちろん未定義であり、したがってエラーが返されるのです。
これが明確であり、また他の人の助けになることを願っています。