Matplotlib plt.show()未显示图形

2024-04-29 10:31:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我的绘图代码似乎没有显示图形(第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)

Tags: lambdanamefromimportdatastringlenif
3条回答

如果你在一个有--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

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

您试图使用的后端不会生成带有plt.show()的图形。相反,您需要使用另一个后端,如WXAgg或QT4agg,其选择将取决于您的系统。请参见Matplotlib后端的this information。相反,如果希望使用svg格式的文件,则应仅使用plt.savefig('filename.svg')。生成的文件将位于工作目录中,您只需要在脚本完成后打开它。

详细说明一下,回答一些其他关于不理解每行的含义的问题:

^{}将在屏幕上生成交互式绘图,假设您使用的是支持绘图到用户界面的后端(渲染器)。

import matplotlib.pyplot as plt只需从matplotlib包导入pyplot库中的函数和类,而as-plt部分有点像使访问这些函数的昵称变得更容易。例如,plt.show()plt.figure等,而不必每次都键入matplotlib.pyplot.show()。另一方面,from pylab import *导入所有不带前缀的函数。一般来说,我会避免使用import *,因为以后读回代码可能会让人感到困惑。另外,pylab可能不是您在这里显示的代码所需要的东西。

^{}是初始化图形的命令。在本例中,由于使用了plot = plt.figure,因此可以键入plot.plot(xData, yData),因为变量plot现在是figure类的一部分。例如,如果需要对某些轴、子块或颜色条执行某些操作,则可以使用ax

我真的建议您浏览一下matplotlib网站上的pyplot tutorial,以便对使用matplotlib进行更全面、但仍然相对简单的介绍。

相关问题 更多 >