在绘制图形 Tcl / Tk 之前调整 Y 值
Adjust Y values before plotting the 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
无需更改原始值即可更好地在 canvas 上显示 Y 值的任何替代解决方案也会有所帮助。
在设备上显示图片的任务需要多个坐标系统和多个转换:
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) 第二步是对物理设备的改造(Screen , Printer ....)
canvas 小部件会处理这个问题。使用 canvas 的缩放方法可以放大或缩小。
答案是您应该先执行 Window-视口变换。
-- 约阿希姆
https://www.siggraph.org/education/materials/HyperGraph/viewing/view2d/pwint.htm
在进一步研究 Tcl/Tk 环境后,我发现了 Gnuplot,这似乎在一定程度上解决了我的问题。 Gnuplot 会根据提供的数据自动调整坐标。
我编写了一个代码来根据文本文件中的一列值生成图表,但是当绘制到图表上时,这些值似乎太小了,因为文本文件中的平均数据如下所示:
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
无需更改原始值即可更好地在 canvas 上显示 Y 值的任何替代解决方案也会有所帮助。
在设备上显示图片的任务需要多个坐标系统和多个转换:
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) 第二步是对物理设备的改造(Screen , Printer ....) canvas 小部件会处理这个问题。使用 canvas 的缩放方法可以放大或缩小。
答案是您应该先执行 Window-视口变换。
-- 约阿希姆 https://www.siggraph.org/education/materials/HyperGraph/viewing/view2d/pwint.htm
在进一步研究 Tcl/Tk 环境后,我发现了 Gnuplot,这似乎在一定程度上解决了我的问题。 Gnuplot 会根据提供的数据自动调整坐标。