我目前正在分析文本中的两个字符组合,并且想使用gnuplot可视化热图中的频率。我的输入文件采用以下格式(COUNT代表此组合的实际编号)
a a COUNT
a b COUNT
...
z y COUNT
z z COUNT
现在,我想创建一个热图(如该站点上显示的第一个热图)。我想在x轴和y轴上显示AZ的字符,即
a
b
...
z
a b ... z
我对gnuplot相当陌生,因此尝试了plot "input.dat" using 2:1:3 with images
,导致出现错误消息“无法使用空的x范围进行绘图”。我幼稚的跑步方法set xrange['a':'z']
并没有太大帮助。
关于SO有很多相关问题,但它们要么处理数字x值(例如,在非均匀网格上带有Gnuplot的热图),要么处理不同的输入数据格式(例如gnuplot:矩阵的x和y轴标签(带有行名和列名的热图)
所以我的问题是:将输入文件转换成漂亮的gnuplot热图的最简单方法是什么?
您需要将字母字符转换为整数。可能可以在gnuplot中以某种方式执行此操作,但这可能很麻烦。
我的解决方案是使用快速的python脚本转换数据文件(假设它称为data.dat
):
#!/usr/bin/env python2.7
with open('data.dat', 'r') as i:
with open('data2.dat', 'w') as o:
lines = i.readlines()
for line in lines:
line = line.split()
x = str(ord(line[0].lower()) - ord('a'))
y = str(ord(line[1].lower()) - ord('a'))
o.write("%s %s %s\n" % (x, y, line[2]))
这需要一个像这样的文件:
a a 1
a b 2
a c 3
b a 4
b b 5
b c 6
c a 7
c b 8
c c 9
并将其转换为:
0 0 1
0 1 2
0 2 3
1 0 4
1 1 5
1 2 6
2 0 7
2 1 8
2 2 9
然后可以在gnuplot中绘制它:
#!/usr/bin/env gnuplot
set terminal pngcairo
set output 'test.png'
set xtics ("a" 0, "b" 1, "c" 2)
set ytics ("a" 0, "b" 1, "c" 2)
set xlabel 'First Character'
set ylabel 'Second Character'
set title 'Character Combination Counts'
plot 'data2.dat' with image
以这种方式手动设置tic有点笨拙,但是效果很好。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句