包含值范围的文本文件中的图形

时间:2011-11-17 10:57:10

标签: graph gnuplot

我有一个包含数字的文本文件,

0.00
0.12
0.35
0.78
0.93
1.12
1.45
1.54
1.67
1.89
1.99
2.01
2.59
2.82

现在我必须按照以下方式构建一个图表,对于上面的值,我应该得到3分,(1,5),(2,6)和(3,3),因为在0.00之间有5个数字和1.00和6之间的数字介于1.01和2.00之间,类似3个数字介于2.01和3.00之间,这是继续进行的最好方式(语言,工具等)?

2 个答案:

答案 0 :(得分:2)

可以使用简单的awk脚本生成所需数据,然后使用任何绘图实用程序(例如gnuplot)进行绘制。

使用awk生成数据:

awk '{bins[int($1)] += 1} END {for(i in bins){print i, bins[i]}}' yourdata.dat > plotdata.dat

然后可以使用gnuplot命令轻松绘制数据:

plot 'plotdata.dat'

答案 1 :(得分:1)

用C#编写的这个小例子可能是一个很好的起点:

List<double> list = new List<double>() {
     0.00,0.12,0.35,0.78,0.93,1.12,1.45,1.54,
     1.67,1.89,1.99,2.01,2.59,2.82};
int maxval = (int)list.Max();
Dictionary<int, int> dict = new Dictionary<int, int>();
for (int i = 0; i <= maxval; i++)
     dict.Add(i + 1, list.Count(item => (int)item >= i && (int)item < (i + 1)));

它是如何运作的?
list只是您在答案中提供的数字列表 首先,我计算该列表中的最大整数(maxval),以了解我的最终数组必须有多长 然后我创建一个新的Dictionary(键是水平值,步骤1,值是所需范围之间的数字)。

用户评论后编辑:
要从文件中读取列表,您可以尝试:

List<double> list = new List<double>();
string[] nums = File.ReadAllLines(your_file);
foreach (string num in nums)
    list.Add(Double.Parse(num));

您应该检查值是否真的是双倍的(可能使用Double.TryParse(...)) 最后:即使数字没有按列表排序,我的功能也能正常工作。