Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python/MatPlot将图形对象保存到一个文件_Python_Numpy_Matplotlib - Fatal编程技术网

Python/MatPlot将图形对象保存到一个文件

Python/MatPlot将图形对象保存到一个文件,python,numpy,matplotlib,Python,Numpy,Matplotlib,我有一个程序,可以从SQL server读取数据,通过循环将数据传递给对象类,创建6个图形作为对象,并将每个图形保存到一个文件中。我试图将所有内容保存到同一个文件中(文件类型与PDF、jpg等无关) 我已经尝试了StackOverflow和搜索internet(打印为PDF、子绘图、创建数组然后从数组中保存等)上可以找到的所有解决方案,但没有一个解决方案适用于此特定场景。使用子绘图有什么错?您可以将一个子批传递给构造函数,并在每次func()调用时写入它。如果您希望避免这种方式,另一种选择是只导

我有一个程序,可以从SQL server读取数据,通过循环将数据传递给对象类,创建6个图形作为对象,并将每个图形保存到一个文件中。我试图将所有内容保存到同一个文件中(文件类型与PDF、jpg等无关)


我已经尝试了StackOverflow和搜索internet(打印为PDF、子绘图、创建数组然后从数组中保存等)上可以找到的所有解决方案,但没有一个解决方案适用于此特定场景。

使用子绘图有什么错?您可以将一个子批传递给构造函数,并在每次func()调用时写入它。如果您希望避免这种方式,另一种选择是只导出到HTML(不建议,MPLd3并不总是完美地重新创建),或者您可以导出到powerpoint,然后将幻灯片保存为图像

我认为这两种选择都不是好主意。这听起来像是子批次的完美用例。

仅供参考

在等待答案的同时,我决定尝试另一种方法,将创建的.png文件读入pdf,而不是创建一个打印或显示对象本身的文档。如果将来有人对此进行研究,并希望有不同的选择,这对我来说是有效的:

from PIL import Image
from fpdf import FPDF

graphArray = []
pdf = FPDF()
w, h = 0, 0

data = pd.DataFrame(pd.read_sql("SELECT *...", cnxn))

for i in range(1, 8):
    graph = GraphObject(i, data)
    graphArray.append(graph.func())
    fname = graphArray[i-1]
    if os.path.exists(fname):
        if i == 1:
            cover = Image.open(fname)
            w, h = cover.size
            pdf = FPDF(unit = "pt", format = [w, h])
        image = fname
        pdf.add_page()
        pdf.image(image, 0, 0, w, h)
    else:
        print("File not found:", fname)
    print("processed %d" % i)
pdf.output("output.pdf", "F")
print("done") 

这里可以找到这个解决方案:

我找到的所有例子re:subplot都是将绘图坐标传递到参数中(例如,在我的头顶上,所以绝对不是精确的语法):x=tan1;y=1;图1子地块(x,y);我不知道如何使用我更复杂的程序、多个y轴、对象等来实现这一点。我想象的是,它不是传递坐标,而是从主for循环外部创建一个图,即fig=plt.子图(6,1),然后修改func()以接受一个fig(或者可以在构造函数中执行这一部分)和两个坐标,即func(fig,x,y),并绘制到子图中的坐标。其他详细信息:如果我尝试将对象或图形传递到子图中,我会得到一个TypeError:float()参数必须是字符串或数字,而不是……(图形,对象等)。我尝试修改对象和函数以传入fig和axs并绘制它们,但也出现了错误。
from PIL import Image
from fpdf import FPDF

graphArray = []
pdf = FPDF()
w, h = 0, 0

data = pd.DataFrame(pd.read_sql("SELECT *...", cnxn))

for i in range(1, 8):
    graph = GraphObject(i, data)
    graphArray.append(graph.func())
    fname = graphArray[i-1]
    if os.path.exists(fname):
        if i == 1:
            cover = Image.open(fname)
            w, h = cover.size
            pdf = FPDF(unit = "pt", format = [w, h])
        image = fname
        pdf.add_page()
        pdf.image(image, 0, 0, w, h)
    else:
        print("File not found:", fname)
    print("processed %d" % i)
pdf.output("output.pdf", "F")
print("done")