gnuplotの対数スケールでのヒストグラム

私は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

たとえば、IPアドレスの14 milionsが1パケット、7 milion 2パケット... 1 ipアドレスが6600パケットを送信したことを示しています。... 1 ipアドレスが19000パケットを送信しました。あなたが見ることができるように、両方の軸の値はかなり高いので、対数スケールなしでプロットすることはできません。

私が最初に試したのは、このリストをプロットすることでした。なぜなら、gnuplotはボックスを使って両方の軸でlogscaleを設定していたからです。結果は理解できるものの、それほど適切ではありません。実際には、ボックスはx軸上を右に行くほどますます薄くなっています。なぜなら、明らかに、1〜10よりも10〜100のポイントが多いからです!だから二十年後には本当の混乱になった。

3
私はより良い理解のために質問を編集しました。 @Blenderはあなたがそのライブラリでそれを行うことは可能でしょうか?
追加された 著者 markusian,
私はちょうどmaplotlib @Blenderが話していたものを使いました。それはまさに私が必要としていたものです!
追加された 著者 markusian,
MatplotlibとPythonそれは素晴らしいツールです。
追加された 著者 Blender,
対数のx軸を持つヒストグラムをプロットするために必要なデータの種類は?たぶん、他のアプローチはあなたのデータをプロットする方が意味があります!
追加された 著者 Woltan,

3 答え

私は両方の軸を対数スケールでスケーリングしてヒストグラムをプロットしようとしました。そして、エラーを通してgnuplot

Log scale on X is incompatible with histogram plots.

したがって、gnuplotはヒストグラムを使ってx軸のログスケールをサポートしていないようです。

5
追加された
それは知っておくべき重要なことです!
追加された 著者 markusian,
これは確かに真実ではありません。 GnuPlotは、ログログプロットをサポートしています。ログログのスケーリングは set logscale で設定し、 plot "file.txt" w p コマンドでデータを使ってファイルをプロットすることができます。 「file.txt」には、1行に2つの値(xとy)があり、そのファイルに対数が定義されていないので、x = 0またはy = 0の行はありません。さらに、ボックスでプロットすることはさらに手間がかかります。 xrangeが[1:m]の形式であり、1とmの間のxのすべての値が与えられ、非ゼロである場合にのみ、 それ以外の場合は、サイズ0のボックスを生成する必要があります=>エラー。
追加された 著者 MightyMouse,
下記の私のサンプルソリューションを参照してください。
追加された 著者 MightyMouse,

GnuPlotのログログスケールでのプロットは、このスレッドの他のポストとは逆に完全に実行可能です。

コマンド set logscale を使って、GnuPlotのログログスケールを設定することができます。 次に、x軸とy軸の両方に正(厳密には非ゼロ)の値を持つファイルがあると仮定します。たとえば、次のファイルは有効なファイルです。

1 0.5
2 0.2
3 0.15
4 0.05

ログログスケールを設定した後、次のコマンドでファイルをプロットすることができます: plot "file.txt" w p もちろん、file.txtはファイルの名前です。このコマンドは、ポイントで出力を生成します。

また、プロットボックスは厄介であり、おそらく推奨されないことに注意してください。最初にx-rangeを set xrange [1:4] という形式のコマンドで制限してから、ボックスでプロットしなければなりません。それ以外の場合は、x-rangeが未定義の場合はエラーが返されます。私は、この場合、プロットには適切なx値のためにいくつかのボックスにサイズlog(0)が必要であると仮定していますが、これは当然定義されていないため、エラーが返されます。

それがはっきりしていて、他の人にも役立つことを願っています。

4
追加された

Matplotlib Python ? Matplotlibは本当に素晴らしいプロットライブラリです。Pythonの単純な構文で使用すると、非常に簡単にプロットすることができます:

import matplotlib.pyplot as plot

figure = plot.figure()
axis = figure.add_subplot(1 ,1, 1)
axis.set_yscale('log')

# Rest of plotting code
1
追加された
コメントのおかげで、私はmatplotlibの使用を開始しました。私はlogspaceを使って対数ビンを作成しました。今私が理解しようとしているのは、なぜnorm =ヒスト関数のTrueが機能していないかを理解することです。
追加された 著者 markusian,
これは混乱するキーワードで、numpyの次のメジャーリリース(matplotlibの数値バックエンド)で削除されます。ドキュメントには、ドキュメントを使用することを提案しています。 scipy.org/doc/numpy/reference/generated/…
追加された 著者 Blender,