我有一个包含数字的文本文件,
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之间,这是继续进行的最好方式(语言,工具等)?
答案 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(...)
)
最后:即使数字没有按列表排序,我的功能也能正常工作。