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