Mik*_*lla 32 python matplotlib
使用Octave,我可以将数组绘制到终端,例如,绘制一个带有函数值的数组,x^2在我的终端中输出:
10000 ++---------+-----------+----------+-----------+---------++
++ + + + + ++
|+ : : : : +|
|++ : : : : ++|
| + : : : : + |
| ++ : : : : ++ |
8000 ++.+..................................................+.++
| ++ : : : : ++ |
| ++ : : : : ++ |
| + : : : : + |
| ++ : : : : ++ |
| + : : : : + |
6000 ++....++..........................................++....++
| ++ : : : : ++ |
| + : : : : + |
| ++ : : : : ++ |
| ++: : : :++ |
4000 ++........++..................................++........++
| + : : + |
| ++ : : ++ |
| :++ : : ++: |
| : ++ : : ++ : |
| : ++ : : ++ : |
2000 ++.............++........................++.............++
| : ++ : : ++ : |
| : +++ : : +++ : |
| : ++ : : ++ : |
| : +++: :+++ : |
+ + ++++ ++++ + +
0 ++---------+-----------+----------+-----------+---------++
0 20000 40000 60000 80000 100000
Run Code Online (Sandbox Code Playgroud)
有什么方法可以在Python中做类似的事情,特别是使用matplotlib?bashplotlib似乎提供了一些这样的功能,但与Octave的产品相比似乎相当基本.
Jak*_*kob 20
正如@Benjamin Barenblat指出的那样,目前没有办法使用matplotlib.如果你真的想使用纯python库,你可以检查ASCII绘图仪.但是,正如我在上面评论的那样,我会按照建议使用gnuplot,例如在这个问题中.
要直接从python使用gnuplot你可以使用Gnuplot.py(我还没有测试过)或者使用gnuplot和脚本界面.后者可以实现(如此处所示),如:
import numpy as np
x=np.linspace(0,2*np.pi,10)
y=np.sin(x)
import subprocess
gnuplot = subprocess.Popen(["/usr/bin/gnuplot"],
stdin=subprocess.PIPE)
gnuplot.stdin.write("set term dumb 79 25\n")
gnuplot.stdin.write("plot '-' using 1:2 title 'Line1' with linespoints \n")
for i,j in zip(x,y):
gnuplot.stdin.write("%f %f\n" % (i,j))
gnuplot.stdin.write("e\n")
gnuplot.stdin.flush()
Run Code Online (Sandbox Code Playgroud)
这给出了一个类似的情节
1 ++--------+---A******---------+--------+---------+---------+--------++
+ + ** +A* + + + Line1 **A*** +
0.8 ++ ** * ++
| ** ** |
0.6 ++ A * ++
| * * |
0.4 ++ * ++
| ** A |
0.2 ++* * ++
|* * |
0 A+ * A ++
| * * |
-0.2 ++ * * ++
| A* ** |
-0.4 ++ * * ++
| ** * |
-0.6 ++ * A ++
| * ** |
-0.8 ++ ** ++
+ + + + + A****** ** + +
-1 ++--------+---------+---------+--------+--------A+---------+--------++
0 1 2 3 4 5 6 7
Run Code Online (Sandbox Code Playgroud)
一些造型选项可以在这里找到.
nic*_*aro 17
你也可以试试Sympy的TextBackend情节,参见doc.或者只是使用textplot.
这是一个例子
from sympy import symbols
from sympy.plotting import textplot
x = symbols('x')
textplot(x**2,0,5)
Run Code Online (Sandbox Code Playgroud)
与输出
24.0992 | /
| ..
| /
| ..
| ..
| /
| ..
| ..
12.0496 | ---------------------------------------..--------------
| ...
| ..
| ..
| ...
| ...
| ...
| .....
| .....
0 | .............
0 2.5 5
Run Code Online (Sandbox Code Playgroud)
Dat*_*eek 12
很少有答案已经表明这gnuplot是一个很好的选择.
但是,没有必要调用gnuplot子进程,使用python gnuplotlib库可能要容易得多.
示例(来自:https://github.com/dkogan/gnuplotlib):
>>> import numpy as np
>>> import gnuplotlib as gp
>>> x = np.linspace(-5,5,100)
>>> gp.plot( x, np.sin(x) )
[ graphical plot pops up showing a simple sinusoid ]
>>> gp.plot( (x, np.sin(x), {'with': 'boxes'}),
... (x, np.cos(x), {'legend': 'cosine'}),
... _with = 'lines',
... terminal = 'dumb 80,40',
... unset = 'grid')
[ ascii plot printed on STDOUT]
1 +-+---------+----------+-----------+-----------+----------+---------+-+
+ +|||+ + + +++++ +++|||+ + +
| |||||+ + + +|||||| cosine +-----+ |
0.8 +-+ |||||| + + ++||||||+ +-+
| ||||||+ + ++||||||||+ |
| ||||||| + ++||||||||| |
| |||||||+ + ||||||||||| |
0.6 +-+ |||||||| + +||||||||||+ +-+
| ||||||||+ | ++||||||||||| |
| ||||||||| + ||||||||||||| |
0.4 +-+ ||||||||| | ++||||||||||||+ +-+
| ||||||||| + +|||||||||||||| |
| |||||||||+ + ||||||||||||||| |
| ||||||||||+ | ++||||||||||||||+ + |
0.2 +-+ ||||||||||| + ||||||||||||||||| + +-+
| ||||||||||| | +||||||||||||||||+ | |
| ||||||||||| + |||||||||||||||||| + |
0 +-+ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ +-+
| + ||||||||||||||||||+ | ++|||||||||| |
| | +||||||||||||||||| + ||||||||||| |
| + ++|||||||||||||||| | +|||||||||| |
-0.2 +-+ + ||||||||||||||||| + ||||||||||| +-+
| | ++||||||||||||||+ | ++||||||||| |
| + ||||||||||||||| + ++|||||||| |
| | +|||||||||||||| + ||||||||| |
-0.4 +-+ + ++||||||||||||+ | +|||||||| +-+
| + ||||||||||||| + ||||||||| |
| | +|||||||||||+ + ++||||||| |
-0.6 +-+ + ++|||||||||| | +||||||| +-+
| + ||||||||||| + ++|||||| |
| + +|||||||||+ + ||||||| |
| + ++|||||||| + +++||||| |
-0.8 +-+ + + ++||||||+ + + +||||| +-+
| + + +|||||| + + ++|||| |
+ + + ++ ++|||++ + + ++ + + ++||| +
-1 +-+---------+----------+-----------+-----------+----------+---------+-+
-6 -4 -2 0 2 4 6
Run Code Online (Sandbox Code Playgroud)
j08*_*lue 10
如果您只需要快速浏览并且x轴间距相等,您也可以自己做一些快速的ascii输出.
In [1]: y = [20, 26, 32, 37, 39, 40, 38, 35, 30, 23, 17, 10, 5, 2, 0, 1, 3,
....: 8, 14, 20]
In [2]: [' '*(d-1) + '*' for d in y]
Out[2]:
[' *',
' *',
' *',
' *',
' *',
' *',
' *',
' *',
' *',
' *',
' *',
' *',
' *',
' *',
'*',
'*',
' *',
' *',
' *',
' *']
Run Code Online (Sandbox Code Playgroud)
如果您的y-data不是整数,则偏移并缩放它们,使它们处于可行的范围内.例如,上述数字基本上是( sin(x)+1 )*20.
我刚刚发布了asciiplotlib,希望能让你的生活更轻松.对于线图,您需要安装gnuplot和asciiplotlib,
pip3 install termplotlib --user
Run Code Online (Sandbox Code Playgroud)
在此之后,生成线图
import termplotlib as tpl
import numpy
x = numpy.linspace(0, 2 * numpy.pi, 10)
y = numpy.sin(x)
fig = tpl.figure()
fig.plot(x, y, label="data", width=50, height=15)
fig.show()
Run Code Online (Sandbox Code Playgroud)
1 +---------------------------------------+
0.8 | ** ** |
0.6 | * ** data ******* |
0.4 | ** |
0.2 |* ** |
0 | ** |
| * |
-0.2 | ** ** |
-0.4 | ** * |
-0.6 | ** |
-0.8 | **** ** |
-1 +---------------------------------------+
0 1 2 3 4 5 6 7
Run Code Online (Sandbox Code Playgroud)
检查允许使用 python3 在终端上直接绘制数据的包plotext。它非常直观,因为它的使用与matplotlib包非常相似。
这是一个基本示例:
您可以使用以下命令安装它:
sudo -H pip install plotext
Run Code Online (Sandbox Code Playgroud)
至于 matplotlib,主要功能是scatter(对于单点)、plot(对于由线连接的点)和show(在终端上实际打印绘图)。很容易指定绘图尺寸、点和线样式,以及任何显示轴、数字刻度和最终方程的内容,用于将绘制的坐标转换为原始实数值。
这是生成上面显示的图的代码:
import plotext.plot as plx
import numpy as np
l=3000
x=np.arange(0, l)
y=np.sin(4*np.pi/l*np.array(x))*np.exp(-0.5*np.pi/l*x)
plx.scatter(x, y, rows = 17, cols = 70)
plx.show(clear = 0)
Run Code Online (Sandbox Code Playgroud)
clear=True里面的选项show用于在绘图前清除终端:这很有用,例如,在绘制连续的数据流时。绘制连续数据流的示例如下所示:

该包的描述提供了关于如何自定义情节的更多信息。该软件包已在 Ubuntu 16 上进行了测试,可以完美运行。未来可能的发展(根据要求)可能涉及对 Python2 和其他图形界面(例如 Jupiter)的扩展。
小智 6
另一种选择是drawilleplot包。
https://github.com/gooofy/drawilleplot
pip3 install drawilleplot
Run Code Online (Sandbox Code Playgroud)
我发现这是一个非常好的方法,因为您只需要更改 Matplotlib 后端即可启用它。
import matplotlib
matplotlib.use('module://drawilleplot')
Run Code Online (Sandbox Code Playgroud)
之后,可以像往常一样使用 Matplotlib。
这是 README 包中的一个示例(请注意,这些图看起来比这里粘贴的要好。)
def f(t):
return np.exp(-t) * np.cos(2*np.pi*t)
t1 = np.arange(0.0, 5.0, 0.1)
t2 = np.arange(0.0, 5.0, 0.02)
plt.figure()
plt.subplot(211)
plt.plot(t1, f(t1), 'bo', t2, f(t2), 'k')
plt.subplot(212)
plt.plot(t2, np.cos(2*np.pi*t2), 'r--')
plt.show()
plt.close()
Run Code Online (Sandbox Code Playgroud)
???????????????????????????????????????????????????????????????????????????????????????????????????????
???1.0?????????????????????????????????????????????????????????????????????????????????????????????????
???????????????????????????????????????????????????????????????????????????????????????????????????????
???????????????????????????????????????????????????????????????????????????????????????????????????????
???????????????????????????????????????????????????????????????????????????????????????????????????????
???????????????????????????????????????????????????????????????????????????????????????????????????????
???0.5?????????????????????????????????????????????????????????????????????????????????????????????????
???????????????????????????????????????????????????????????????????????????????????????????????????????
???????????????????????????????????????????????????????????????????????????????????????????????????????
???????????????????????????????????????????????????????????????????????????????????????????????????????
???0.0?????????????????????????????????????????????????????????????????????????????????????????????????
???????????????????????????????????????????????????????????????????????????????????????????????????????
???????????????????????????????????????????????????????????????????????????????????????????????????????
???????????????????????????????????????????????????????????????????????????????????????????????????????
?0.5???????????????????????????????????????????????????????????????????????????????????????????????????
???????????????????????????????????????????????????????????????????????????????????????????????????????
???????????????????????????????????????????????????????????????????????????????????????????????????????
????????????0????????????????1????????????????2????????????????3????????????????4????????????????5
???????????????????????????????????????????????????????????????????????????????????????????????????????
???1.0?????????????????????????????????????????????????????????????????????????????????????????????????
???????????????????????????????????????????????????????????????????????????????????????????????????????
???????????????????????????????????????????????????????????????????????????????????????????????????????
???????????????????????????????????????????????????????????????????????????????????????????????????????
???0.5?????????????????????????????????????????????????????????????????????????????????????????????????
???????????????????????????????????????????????????????????????????????????????????????????????????????
???????????????????????????????????????????????????????????????????????????????????????????????????????
???0.0?????????????????????????????????????????????????????????????????????????????????????????????????
???????????????????????????????????????????????????????????????????????????????????????????????????????
???????????????????????????????????????????????????????????????????????????????????????????????????????
???????????????????????????????????????????????????????????????????????????????????????????????????????
?0.5???????????????????????????????????????????????????????????????????????????????????????????????????
???????????????????????????????????????????????????????????????????????????????????????????????????????
???????????????????????????????????????????????????????????????????????????????????????????????????????
?1.0???????????????????????????????????????????????????????????????????????????????????????????????????
??????????????????????????????????????????????????????????????????????????????????????????????????????
Run Code Online (Sandbox Code Playgroud)
在大约 100 个字符宽的终端中,情节看起来非常好
您可以像往常一样在 matplotlib 中进行绘图并将其显示为 ascii 文本(彩色或灰色) 使用matplotlib2terminal.py
我在终端中以非常高分辨率显示了我自己的图片,您只需要缩小终端即可。

| 归档时间: |
|
| 查看次数: |
20690 次 |
| 最近记录: |