python - Matplotlib plt.show() 不显示图表

标签 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)

最佳答案

您正在尝试使用不会通过 plt.show() 生成图形的后端。相反,您需要使用另一个后端,例如 WXAgg 或 QT4agg,具体选择取决于您的系统。参见 this information在 Matplotlib 的后端。相反,如果您想要一个 svg 格式的文件,您应该使用 only plt.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),因为您的变量 plot 现在是图中的一部分类(class)。例如,如果您有一些额外的轴、子图或颜色条需要对其执行某些操作,则可以使用 ax

我真的建议您浏览 pyplot tutorial在 matplotlib 网站上为您提供关于使用 matplotlib 的更全面但相对简短的介绍。

关于python - Matplotlib plt.show() 不显示图表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21688409/

相关文章:

python - 为什么 Python 单元测试中的语法无效

python - python 服务器进程的性能监控/分析(类似于 New Relic)

python - 稀疏 Scipy/Numpy : an efficient way to implement sum of pairwise mins operation

haskell - 将树转换为函数图库树的优雅方法?

algorithm - 量化二分图中的成对、三重等重叠

python - 设置颜色以用于使用 matplotlib contourf 绘制的数组屏蔽值

python - 如何在 pygame 中使圆圈半透明?

c - 从文件(C 语言)中读取整数,其中包括有向图的数据

python ndarray 什么是返回值

python - 控制seaborn热图中的单个线宽