小python3脚本在命令行上快速绘制数据

问题描述

我一直在寻找一种快速方法来从终端命令行显示输入文件中两列数据之间的二维图。

我找到了这个链接simple-plotting

尤其是 plot 脚本:

#!/usr/bin/python3

from __future__ import division
import numpy as np
import matplotlib.pyplot as plt
import sys

fcns = sys.argv[1].split(';')
minx = eval(sys.argv[2])
maxx = eval(sys.argv[3])
plt.xlim(minx,maxx)
try:
  miny = float(sys.argv[4])
  maxy = float(sys.argv[5])
  plt.ylim(miny,maxy)
except IndexError:
  pass

x = linspace(minx,maxx,100)
for i,f in enumerate(fcns):
  y = eval(f)
  plt.plot(x,y,"-",linewidth=2)
plt.minorticks_on()
plt.grid(which='both',color='#aaaaaa')
plt.savefig(sys.stdout,format='png')
  1. 首先,正常使用的是(我使用的是 MacOS Big Sur):

    $ plot 'tan(x); x' pi 3*pi/2-.01 0 5

但我收到以下错误pi 似乎无法识别)

zsh: no matches found: 3*pi/2-.01
  1. 其次,一旦第一个小问题得到解决,我想对其进行修改,以便不必指定 minxmaxx

为此,我必须找到 x 轴数据的最小值和最大值,并且我会对 y 轴值执行相同的操作。

为了实现它,我会尝试:

# Chose the first column x-axis : sys.argv[2]
# Chose the first column y-axis : sys.argv[3]
columnx = sys.argv[2]
columny = sys.argv[3]

data = np.loadtxt(sys.argv[1])

minx = np.min(data[:,columnx])
maxx = np.max(data[:,columnx])
miny = np.min(data[:,columny])
maxy = np.max(data[:,columny])

# Limits
plt.xlim(minx,maxx)
plt.ylim(miny,maxy)

# Plot
x = linspace(minx,format='png')

但我意识到使用这个代码片段,我不能同时拥有这两种功能:绘制一个类似于 $ plot 'tan(x); x' pi 3*pi/2-.01 0 5 命令的函数,同时能够做到:

$ plot input.dat 1 2

绘制第 1 列与第 2 列的线条。

如果有人建议首先调试问题 1) 和 2) 以获得两个功能:绘制函数和绘制数据文件 2 列,这很好告诉它。

抱歉eval,我知道不推荐这样做,但欢迎使用其他替代方法

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)