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

标签 linux plot graph tcl tk-toolkit

我编写了一个代码来根据文本文件中的一列值生成图表,但是当绘制到图表上时这些值似乎太小了,因为文本文件中的平均数据如下所示:

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) 首先,您必须将世界坐标中的图片映射到规范化的设备坐标(视口(viewport))。这就是所谓的窗口/视口(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 的缩放方法可以放大或缩小。

答案是您应该先执行窗口-视口(viewport)转换。

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

关于linux - 在绘制 Tcl/Tk 图形之前调整 Y 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36490759/

相关文章:

algorithm - 下面算法的时间复杂度是多少?

c++ - 大型阵列的段错误(核心已转储)

php - 如何在树莓派上将数据从网站发送到网络服务器?

r - 如何在 R 中的 "y"轴的两侧绘制(几乎)相同的函数?

java - 查找加权有向图中两个指定顶点之间是否存在任何路径

algorithm - 稠密图中有多少条边

linux - 在 CentOS 中使用 Nginx 作为 Apache 上 wordpress 的反向代理

linux - 生成映射的 D2RQ 参数

matlab - 使轴和刻度线优先于绘制的线

python - 通过 Pandas 动画 Matplotlib/Seaborn 绘图?