在绘制图形Tcl / Tk之前调整Y值

时间:2016-04-08 02:55:55

标签: linux plot graph tcl tk

我制作了一个代码,用于根据文本文件中的一列值生成图形,但是当绘制到图形上时,这些值看起来太小,因为文本文件中的平均数据如下所示:

0.00
4.42
1.10
0.47
0.21
0.51
0.28
0.21
0.01
0.00

如何更改我的代码,以便在代码绘制图形之前我可以将值增加标准数量?

这是我的代码:

package require Tk

set width 300
set height 100
set openFile [open "/fileDirectory/file.txt"]
set records [read $openFile]
set data $records

canvas .c -width $width -height $height

text .t
.t insert end $records

pack .c 
pack .t

set count 0 

foreach yValue $data {
  lappend coords \
  [expr {$width * $count/double([llength $data])}] \
  [expr {$height - $yValue}]
  incr count
}
.c create line $coords

*生成图表的代码参考here

任何可以更好地在画布上显示Y值而无需更改原始值的替代解决方案也会有所帮助。

1 个答案:

答案 0 :(得分:0)

在设备上显示图片的任务需要多个协调系统和几个转换:

1)首先,您必须将世界坐标中的图片映射到标准化设备坐标(视口)。这就是所谓的Window / Viewport转换。

公式是: Xv = [(Xvmax-Xvmin)/(Xwmax-Xwmin)] *(Xw-Xwmin)+ Xvmin = Sx *(Xw-Xwmin)+ Xvmin = Sx * Xw + Cx

其中Sx =(Xvmax - Xvmin)/(Xwmax - Xwmin) Cx = Sx *( - Xwmin)+ Xvmin

同样适用于Y

Yv = [(Yvmax-Yvmin)/(Ywmax-Ywmin)] *(Yw-Ywmin)+ Yvmin = Sy *(Yw-Ywmin)+ Yvmin = Sy * Yw + Cy (摘自下面的参考文献)

2)第二步是转换到物理设备(屏幕,打印机......) canvas小部件负责处理。使用画布的缩放方法可以放大或缩小。

答案是你应该首先执行Window-Viewport转换。

- 约阿希姆 https://www.siggraph.org/education/materials/HyperGraph/viewing/view2d/pwint.htm