2

我有如下数据:

0 FRANCK -0.46
0 JUSSE -1.41
1 JUSSE -0.13
1 FRANCK -2.10

我想做一个 3D 绘图,但我需要显示类别(或标签):

splot "map.gnu" using 1:2:3:yticlabels(2) with points palette pointsize 3 pointtype 7

这给了我一个错误:

 syntax error near unexpected token `('
4

2 回答 2

1

在我看来,在不更改数据文件的情况下最简单的方法是将 , 等映射FRANCKJUSSE允许 gnuplot 将这些名称解释为数字的数字数组上。理想情况下,您将定义一个函数,该函数map(x)将名称作为参数并返回一个数字,例如map("FRANCK") = 0map("JUSSE") = 1等:

map(x) = x eq "FRANCK" ? 0 \
: x eq "JUSSE" ? 1 : 1/0 # You can add more names
splot "map.gnu" u 1:(var = strcol(2), map(var)):3:yticlabels(2) \
with points palette pointsize 3 pointtype 7

在此处输入图像描述

当然,如果您事先不知道文件中有多少个名字和哪些名字,克里斯托夫的回答会更方便。

于 2014-06-03T19:32:24.650 回答
1

您还必须为 y 值提供一列。Gnuplot 不能为相同的字符串自动生成坐标。但是对于 4.6.4,如果我测试您的代码,我不会收到错误,它只会告诉我warning: No usable data in this plot to auto-scale axis range. All points x value undefined. 如果您提供格式为

0 0 FRANCK -0.46
0 1 JUSSE -1.41
1 1 JUSSE -0.13
1 0 FRANCK -2.10

并与

splot "map.gnu" u 1:2:4:yticlabels(3) w p palette ps 3 pt 7

如果适用于 4.6.4。

...我有没有说它不适用于您的原始文件?那不是完全正确的;)

list = ''
index(w) = words(substr(list, 0, strstrt(list, w)-1))
add_label(d) = (strstrt(list, d) == 0 ? list=list.' '.d : '')

splot 'map.gnu' using (d='|'.strcol(2).'|', add_label(d), $1):(index(d)):3:ytic(2) w p palette ps 3 pt 7

有关解释,请参阅我对Gnuplot 的回答,在 y 轴上绘制带有文本的图形。4.6.4 的结果:

在此处输入图像描述

我已经看到,ytics 的对齐不能用leftor来控制rightoffset定义视角后,您必须使用来更正 tic 标签位置。

于 2014-06-03T19:05:36.900 回答