python Matplotlibplt.show()不显示图表

uelo1irk  于 2023-04-04  发布在  Python
关注(0)|答案(6)|浏览(167)

我的绘图代码似乎没有显示图形(第12行到第59行可能没有破坏它,但我包括了它们以防万一-我有一些数据需要一段时间才能放入排序列表)。
我已经尝试过了,但我认为主要的问题是我不明白figure()plt.show()import matplotlib.pyplot as pltfrom 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)
cbjzeqam

cbjzeqam1#

您正在尝试使用一个不会使用plt.show()生成图形的后端。相反,您需要使用另一个后端,如WXAgg或QT4agg,其选择将取决于您的系统。请参阅Matplotlib后端上的this information。相反,如果您希望拥有svg格式的文件,则应该使用onlyplt.savefig('filename.svg')。生成的文件将位于您的工作目录中。你只需要在脚本完成后打开它。
详细解释一下,以回答你关于不理解单行含义的其他一些问题:
plt.show()将在您的屏幕上生成一个交互式绘图,假设您使用的是支持绘图到用户界面的后端(渲染器)。
import matplotlib.pyplot as plt只是从matplotlib包中导入pyplot库中的函数和类,as 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 tutorial,给予你一个更全面的,但仍然相对简短和简单的关于使用matplotlib的介绍。

m2xkgtsf

m2xkgtsf2#

如果你在虚拟环境中使用--no-site-packages执行pip install matplotlib,而plt.show()没有显示出你的图:
1)apt-get安装matplotlib,然后virtualenv --system-site-packages FOLDERNAME
2)this guide

pip uninstall matplotlib  
sudo apt-get install python-gtk2-dev
ln -sf /usr/lib/python2.7/dist-packages/{glib,gobject,cairo,gtk-2.0,pygtk.py,pygtk.pth} $VIRTUAL_ENV/lib/python2.7/site-packages
pip install matplotlib

指南中还有另一个步骤,但对我来说不是必要的(在~/.config/matplotlib/matplotlibrc中将后端设置为GTKAgg

bmp9r5qi

bmp9r5qi3#

答案很简单(Ubuntu 21.10)

PyQt

你需要安装一些PyQt版本。目前:

pip install PyQt6

指定GUI后台

import matplotlib
matplotlib.use("QtAgg")

尝试plt.show()

from matplotlib import pyplot as plt

# some code here

plt.show()
  • 这对我来说完美无瑕,希望对你也有效 *
jw5wzhpr

jw5wzhpr4#

在我的案例中,我通过从www.example.com安装python 3.7解决了这个问题python.org,然后简单地在我的IDE(PyCharm CE)上更改了解释器+当然再次安装了所有必要的软件包。没有必要使用另一个后端,我在我的项目中保留了TkAgg。

t9eec4r0

t9eec4r05#

试试这个:-

plot = plt.figure()
plt.plot(xData, yData)
plt.show()
plt.savefig(str(name).split()[0]+'.png)

并请尝试no将 name 作为用户的输入

6bc51xsx

6bc51xsx6#

我的问题略有不同:
我有一个Jupyter Notebook

import matplotlib.pyplot as plt

在开始的时候,但后来我重新导入它,重新导入后的数字不起作用。删除第二个导入似乎修复了它。

相关问题