Matplotlib plt.show()未显示图形

Jam*_*lls 5 python graph matplotlib

我的绘图代码似乎没有显示图形(第12到第59行可能没有打破它,但我包括它们以防万一 - 我有一些数据需要一段时间才能放入排序列表).

我与它周围的混乱和尝试不同的东西,但我认为主要的问题是,我不明白是什么figure(),plt.show(),import matplotlib.pyplot as plt, from pylab import *和其他一些线路的实际含义.我不知道什么时候需要使用它们或者为什么我需要使用它们.

有人可以帮助我并解释如何绘制两个列表的.svg并在最后显示有关为什么每行都包含在内的详细信息以及当我放在plt.前面时以及当我放在ax.前面时以及当我没有放任何东西时在前面等?对不起,这需要很长时间才能回答,但我真的不明白matplotlib或他们网站上的任何例子.

import matplotlib
matplotlib.use('SVG')
import matplotlib.pyplot as plt
import string, math
from pylab import *
from decimal import *

name = raw_input("Enter the filename:\n")

myfile = open("datafiles/"+name+".data", 'r')

xData = []
yData = []
plots = [name]
mydata = myfile.readlines()

i = 0
N = len(mydata)
while (i < N):
    string = mydata[i]
    data = [str(x) for x in string.split(" ")]
    data=filter(lambda x: len(x)>0, data)
    xData.append(data[1])
    yData.append(data[2])
    i = i + 1

i = 0
while (i < N):
    if (float(xData[i]) <= 0):
        xData[i] = ""
        yData[i] = ""
    if (xData[i] == "nan" or xData[i] == "-nan"):
        xData[i] = ""
        yData[i] = ""
    i = i + 1

xData=filter(lambda x: len(x)>0, xData)
yData=filter(lambda x: len(x)>0, yData)

N = len(xData)
i = 0

while (i < N):
    xData[i] = float(xData[i])
    yData[i] = float(yData[i])
    i = i + 1

j = 0
while (j < N):
    i = 0 
    while (i < (N-j-1)):
        if (xData[i]>xData[i+1]):
            a, b = xData[i], xData[i+1]
            xData[i+1], xData[i] = a, b

            a, b = yData[i], yData[i+1]
            yData[i+1], yData[i] = a, b
        i = i + 1
    j = j + 1

plot = plt.figure(1)
plt.plot(xData, yData)
plt.show(1)
plt.savefig(name)
Run Code Online (Sandbox Code Playgroud)

pse*_*bic 7

您正在尝试使用不会生成图形的后端plt.show().相反,您需要使用另一个后端,如WXAgg或QT4agg,其选择取决于您的系统.请参阅有关Matplotlib后端的此信息.相反,只有 plt.savefig('filename.svg')在希望拥有svg格式的文件时才应该使用.生成的文件将位于您的工作目录中,您只需在脚本完成后打开它.

要详细说明一些其他问题,不要理解单个行的含义:

plt.show() 假设您使用支持绘制到用户界面的后端(渲染器),将在屏幕上生成交互式绘图.

import matplotlib.pyplot as plt只需从matplotlib包中导入pyplot库中的函数和类,而plt部分就像制作一个昵称来更容易地访问这些函数.例如,plt.show(),plt.figure等代替不必键入出matplotlib.pyplot.show()每一次.另一方面,from pylab import *导入所有没有前缀的函数.一般情况下,我会避免使用,import *因为稍后回读代码会让人感到困惑.此外,pylab可能不是您在此处显示的代码所需的内容.

plt.figure()是初始化你的数字的命令.在这种情况下,由于您使用了plot = plt.figure,您可以输入plot.plot(xData, yData),因为您的变量图现在是图类的一部分.你可以使用ax,如果您对您需要执行一些操作一些附加轴,次要情节或彩条的例子.

我真的建议您浏览matplotlib网站上的pyplot教程,为您提供更全面,但仍然相对简短而简单的使用matplotlib的介绍.


小智 6

好的,答案很简单。(乌班图21.10)

pyqt

您将需要安装某个版本的 PyQt。眼下:

pip install PyQt6
Run Code Online (Sandbox Code Playgroud)

指定 GUI 后端

pip install PyQt6
Run Code Online (Sandbox Code Playgroud)

尝试plt.show()

import matplotlib
matplotlib.use("QtAgg")
Run Code Online (Sandbox Code Playgroud)

这对我来说完美无缺。希望它也对你有用。