Matplotlib 绘图的标准 ASCII 文件格式

1 投票
2 回答
1511 浏览
提问于 2025-04-18 02:23

我正在做一个大型的硬件测试项目,遇到的问题是我想把测试系统中Python脚本输出的数据绘制成图,但这些系统的性能不够强,无法运行像matplotlib这样的工具。我开始定义一种格式,把数据传回记录所有测试系统数据的服务器;不过,如果有现成的工具可以以标准化的方式将图形写入ASCII文件,并在其他地方读取并绘制出来,那就更好了。

我比较喜欢用matplotlib来绘图,但我对使用其他工具也很灵活。我并不介意定义一个自定义格式,只是希望如果matplotlib(或者其他功能齐全的工具)有办法从某种文本格式动态生成图形,那就太好了。提前感谢你的帮助。

补充一下,数据传输其实很简单;我喜欢用JSON来做这个。我现在想要的是,构建一个文件,不仅存储数据,还能说明如何绘制这些数据(也就是说,脚本或应用程序加载这个文件后可以根据它生成图形,文件里可以指定标题、x轴标签、y轴标签,可能还需要一个图例等等)。通过CSV或JSON写入数据并不难;真正的挑战在于找到一种标准化的方式,把绘图指令发送给主机。

2 个回答

0

你可以考虑使用Matlab的文本格式来传输数据。Scipy有一套可以使用的Matlab输入输出工具。你也可以用普通的Python来实现,方法是把数据保存为JSON格式,或者使用pickle

1

你可以把Python代码写到一个文件里,然后把这个文件发送到服务器上执行,但这样可能会有安全隐患。

为了减少一些安全风险(注意 XML的漏洞),你可以使用 xmlrpclib 来限制从源机器可以调用的函数,这样在服务器上执行的时候就更安全了:

比如,你可以在服务器上运行:

from SimpleXMLRPCServer import SimpleXMLRPCServer
import matplotlib.pyplot as plt

def plot(filename, x, y):
    plt.plot(x, y)
    plt.savefig(filename)    
    return True

server = SimpleXMLRPCServer(("localhost", 8000))
server.register_function(plot, 'plot')
server.serve_forever()

而在源机器上:

import xmlrpclib
proxy = xmlrpclib.ServerProxy("http://localhost:8000/")

x = range(100)
y = [i**2 for i in x]
proxy.plot('/tmp/test.png', x, y)

你还可以给 plot 函数添加更多参数,用来处理标题、图例等等。

在源机器上运行上面的代码会在服务器上生成一个文件 /tmp/test.png

撰写回答