gnuplot vs Matplotlib [已关闭]

gxwragnw  于 2023-03-30  发布在  其他
关注(0)|答案(8)|浏览(116)

已关闭。此问题为opinion-based。当前不接受答案。
**想要改进此问题吗?**请更新此问题,以便editing this post可以用事实和引文来回答。

两年前关闭了。
Improve this question
我已经开始了一个使用gnuplot-py绘制Tomcat日志的项目,特别是将特定的请求与内存分配和垃圾收集相关联。在gnuplot-py和Matplotlib的Python绘图方面,有什么共同的智慧吗?有没有我没听说过的更好的绘图库?
我的总体考虑是:

  • 虽然gnuplot有大量的文档,但gnuplot-py没有。Matplotlib的文档社区有多好?
  • 有没有一些事情是gnuplot可以做而gnuplot-py不能做的?
  • Matplotlib是否有更好的Python支持?
  • 有没有大型节目阻止错误在任何一个?烦恼?
  • 目前gnuplot正在绘制100,000个点,我计划将其扩展到数百万。我应该期待问题吗?Matplotlib处理得如何?
  • gnuplot与Matplotlib的易用性和周转时间?
  • 将现有的gnuplot-py代码移植到Matplotlib有多容易?

你将如何着手完成这项任务?

uinbv5nw

uinbv5nw1#

  • 你可以自己查matplotlib's documentation,我觉得挺全面的。
  • 我使用gnuplot-py的经验很少,所以我不能说它是否能完成gnuplot所能做的一切。
  • Matplotlib是专门为Python编写和设计的,因此它非常适合Python的习惯用法等。
  • Matplotlib是一个成熟的项目。NASA用它来做一些事情。
  • 我已经在Matplotlib中绘制了数千万个点,它看起来仍然很漂亮,React也很快。
  • 除了使用Matplotlib的面向对象方式之外,还有pylab接口,它使绘图像在MATLAB中一样简单--也就是说,非常简单。
  • 至于从gnuplot-py移植到matplotlib,我不知道。
vs91vp4v

vs91vp4v2#

Matplotlib =易用性,Gnuplot =(略好)性能

我知道这篇文章是旧的,回答,但我路过,想把我的两分钱.这里是我的结论:如果你有一个不太大的数据集,你应该使用Matplotlib。它更容易,看起来更好。然而,如果你真的需要性能,你可以使用Gnuplot。我添加了一些代码在你的机器上测试它,看看它是否有真正的区别(这不是一个真正的性能基准测试,但应该给予一个初步的想法)。
下图表示所需的时间(以秒为单位):

  • 绘制随机散点图
  • 将图形保存到png文件

配置:

  • gnuplot:5.2.2
  • 几何图-py:1.8
  • 位图库:2.1.2

我记得当在一台旧计算机上运行旧版本的库时,性能差距要大得多(对于一个大的散点图,大约30秒的差异)。
此外,正如在评论中提到的,你可以得到同等质量的图。但是你必须付出更多的汗水来使用Gnuplot。
Here's the code to generate the graph如果你想给予你的机器上试试:

# -*- coding: utf-8 -*-

from timeit import default_timer as timer
import matplotlib.pyplot as plt
import Gnuplot, Gnuplot.funcutils
import numpy as np
import sys
import os

def mPlotAndSave(x, y):
    plt.scatter(x, y)
    plt.savefig('mtmp.png')
    plt.clf()

def gPlotAndSave(data, g):
    g("set output 'gtmp.png'")
    g.plot(data)
    g("clear")

def cleanup():
    try:
        os.remove('gtmp.png')
    except OSError:
        pass
    try:
        os.remove('mtmp.png')
    except OSError:
        pass

begin = 2
end = 500000
step = 10000
numberOfPoints = range(begin, end, step)
n = len(numberOfPoints)
gnuplotTime = []
matplotlibTime = []
progressBarWidth = 30

# Init Gnuplot
g = Gnuplot.Gnuplot()
g("set terminal png size 640,480")

# Init matplotlib to avoid a peak in the beginning
plt.clf()

for idx, val in enumerate(numberOfPoints):
    # Print a nice progress bar (crucial)
    sys.stdout.write('\r')
    progress = (idx+1)*progressBarWidth/n
    bar = "▕" + "▇"*progress + "▁"*(progressBarWidth-progress) + "▏" + str(idx) + "/" + str(n-1)
    sys.stdout.write(bar)
    sys.stdout.flush()

    # Generate random data
    x = np.random.randint(sys.maxint, size=val)  
    y = np.random.randint(sys.maxint, size=val)
    gdata = zip(x,y)

    # Generate string call to a matplotlib plot and save, call it and save execution time
    start = timer()
    mPlotAndSave(x, y)
    end = timer()
    matplotlibTime.append(end - start)

    # Generate string call to a gnuplot plot and save, call it and save execution time
    start = timer()
    gPlotAndSave(gdata, g)
    end = timer()
    gnuplotTime.append(end - start)

    # Clean up the files
    cleanup()

del g
sys.stdout.write('\n')
plt.plot(numberOfPoints, gnuplotTime, label="gnuplot")
plt.plot(numberOfPoints, matplotlibTime, label="matplotlib")
plt.legend(loc='upper right')
plt.xlabel('Number of points in the scatter graph')
plt.ylabel('Execution time (s)')
plt.savefig('execution.png')
plt.show()
egdjgwm8

egdjgwm83#

matplotlib有很好的文档,而且看起来很稳定。它生成的图很漂亮-“出版质量”是肯定的。由于良好的文档和大量的在线示例代码,它很容易学习和使用,我认为你将gnuplot代码翻译成它不会有太多麻烦。毕竟,matplotlib被科学家用来绘制数据和准备报告-所以它包含了人们需要的一切。
matplotlib的一个显著优点是可以将其与Python GUI(至少是wxPythonPyQt)集成,并创建具有漂亮绘图的GUI应用程序。

eoxn13cs

eoxn13cs4#

使用GNUplot后(用我自己的Python Package 器)很长时间(真的不喜欢80年代的输出),我刚开始看matplotlib.我必须说我非常喜欢它,输出看起来真的很好,文档是高质量和广泛的(尽管这也适用于GNUplot)。我花了很长时间在matplotlib文档中寻找的一件事是如何写到图像文件而不是屏幕上!幸运的是,这个页面解释得很好:http://www.dalkescientific.com/writings/diary/archive/2005/04/23/matplotlib_without_gui.html

2w2cym1i

2w2cym1i5#

关于性能和绘制大量的点:我使用gnuplot* 和matplotlib比较了从文本文件加载并保存到png的500.000个点的散点图。

500.000 points scatterplot
gnuplot:      5.171 s
matplotlib: 230.693 s

我只运行了一次,结果看起来并不相同,但我认为这个想法很清楚:gnuplot在性能上胜出。

  • 我直接使用了gnuplot,因为gnuplotpy演示对我来说并不是开箱即用的。Matplotlib在Python集成方面胜出。
2guxujil

2guxujil6#

我玩过这两个,我更喜欢Matplotlib在Python集成,选项和图形/绘图质量方面。

eyh26e7m

eyh26e7m7#

Gnuplot可以做什么Gnuplot-Py也可以做什么。因为Gnuplot可以由管道(pgnuplot)驱动。Gnuplot-Py只是它的一个薄层。所以你不需要担心它。
为什么我更喜欢gnuplot?可能是因为它有很多输出格式(PDF,PS和LaTex),这在论文中非常有用,默认的输出看起来更科学:)

dddzy1tm

dddzy1tm8#

gnuplot的一些优点(使用多年后我仍然不喜欢matlibplot):

  • plot function 只需使用sin(x)(无需定义数组和考虑范围)
  • 直接绘制 * 文件 *(无需导入数组)
  • 绘制管道数据(动态执行shell命令"<echo 1 2 3"
  • 复制到剪贴板按钮
  • 快速绘图
  • 快速编码
  • 关键词更容易记住

gplot.py是Python和Jupyter的另一个gnuplot Package 器。

相关问题