我正在这里讨论的gnuplot中绘制一棵树(How to plot tree/graph/web data on gnuplot?)。但是,我想包括树的边缘权重,即对于每个边缘,我有一个代表边缘权重的数字(例如10,20,30,40)。下图以红色显示我想在gnuplot中绘制的边缘权重(我使用功率点添加了这个)。
有谁能告诉我如何在gnuplot中用重量绘制边缘?
答案 0 :(得分:1)
我建议你在问题中提到的答案略有不同。让我们假设顶点的坐标存储在文件pnts.dat
中,如下所示:
0 5 10
1 20 20
2 15 15
3 30 30
4 40 10
这里,第一列记录相应的标签,第二列和第三列分别包含x和y坐标。
边缘可以在单独的文件edges.dat
中定义为:
0 1 30 0 1
1 2 40 0 -2
1 4 20 0 1
1 3 10 0 1
这里,前两列包含点索引(它们指的是pnts.dat
的第一列)。第三列记录特定边缘的权重。最后,最后两列包含生成的关联标签的x,y位移。
有了这个,Gnuplot脚本可能看起来像:
set xr [0:50]
set yr [0:50]
set size square
flePnts = 'pnts.dat'
fleEdges = 'edges.dat'
loadEdges = sprintf('< gawk '' \
FNR==NR{x[$1]=$2;y[$1]=$3;next;} \
{printf "%%f\t%%f\n%%f\t%%f\n\n", x[$1], y[$1], x[$2], y[$2];} \
'' %s %s', flePnts, fleEdges);
loadWeights = sprintf('< gawk '' \
FNR==NR{x[$1]=$2;y[$1]=$3;next;} \
{printf "%%f\t%%f\t%%s\n", (x[$1]+x[$2])/2 + $4, (y[$1]+y[$2])/2 + $5, $3} \
'' %s %s', flePnts, fleEdges);
plot \
loadEdges using 1:2 with lines lc rgb "black" lw 2 notitle, \
flePnts using 2:3:(0.6) with circles fill solid lc rgb "black" notitle, \
flePnts using 2:3:1 with labels tc rgb "white" font "Arial Bold" notitle, \
loadWeights using 1:2:3 with labels tc rgb "red" center font "Arial Bold" notitle
答案 1 :(得分:0)
另外,如果要向边缘添加箭头,则必须执行以下步骤:
添加箭头样式:
set style arrow 1 head filled size screen 0.025,10,40 lc rgb "black" lw 2
使用向量 更改命令行
loadEdges using 1:2:3:4 with vectors arrowstyle 1 notitle, \
下图显示了最终结果:
这是最终的代码:
set xr [0:50]
set yr [0:50]
set size square
set style arrow 1 head filled size screen 0.025,10,40 lc rgb "black" lw 2
flePnts = 'pnts.dat'
fleEdges = 'edges.dat'
loadEdges = sprintf('< gawk '' \
FNR==NR{x[$1]=$2;y[$1]=$3;next;} \
{printf "%%f\t%%f\t%%f\t%%f\n\n", x[$1], y[$1], (x[$2]-x[$1]), (y[$2]-y[$1]);} \
'' %s %s', flePnts, fleEdges);
loadWeights = sprintf('< gawk '' \
FNR==NR{x[$1]=$2;y[$1]=$3;next;} \
{printf "%%f\t%%f\t%%s\n", (x[$1]+x[$2])/2 + $4, (y[$1]+y[$2])/2 + $5, $3} \
'' %s %s', flePnts, fleEdges);
plot \
loadEdges using 1:2:3:4 with vectors arrowstyle 1 notitle, \
flePnts using 2:3:(0.6) with circles fill solid lc rgb "black" notitle, \
flePnts using 2:3:1 with labels tc rgb "white" font "Arial Bold" notitle, \
loadWeights using 1:2:3 with labels tc rgb "red" center font "Arial Bold" notitle