Python imagemagick возвращается ненулевой - PullRequest
0 голосов
/ 30 апреля 2020

Я пишу код для преобразования графиков уравнений kinemati c в pdf и gif, и он работает для первого преобразования, а затем второе преобразование завершается неудачей.

from matplotlib import pyplot as plt
from celluloid import Camera
import threading
import time

timeone = time.time()


def figsaver(fig, args):
    fig.savefig(args)


def threadfunc(cam, args):
    anim = cam.animate(interval=40)
    anim.save(args[0], args[1])


def xypair(angle, color):
    pair = XYPair()
    pair.setvars((100 * np.cos(np.radians(angle))) * (np.arange(0, ((100 * np.sin(np.radians(angle))) * -2) / -9.8 + (((100 * np.sin(np.radians(angle))) * -2) / -9.8) / 50, (((100 * np.sin(np.radians(angle))) * -2) / -9.8) / 50)), (100 * np.sin(np.radians(angle))) * (np.arange(0, ((100 * np.sin(np.radians(angle))) * -2) / -9.8 + (((100 * np.sin(np.radians(angle))) * -2) / -9.8) / 50, (((100 * np.sin(np.radians(angle))) * -2) / -9.8) / 50)) + (1 / 2) * -9.8 * ((np.arange(0, ((100 * np.sin(np.radians(angle))) * -2) / -9.8 + (((100 * np.sin(np.radians(angle))) * -2) / -9.8) / 50, (((100 * np.sin(np.radians(angle))) * -2) / -9.8) / 50)) ** 2), (np.arange(0, ((100 * np.sin(np.radians(angle))) * -2) / -9.8 + (((100 * np.sin(np.radians(angle))) * -2) / -9.8) / 50, (((100 * np.sin(np.radians(angle))) * -2) / -9.8) / 50)), angle, color)
    return pair


class XYPair:
    xval = 0
    yval = 0
    time = 0
    angle = 0
    label = ''
    color = ""

    def setvars(self, x, y, time, angle, color):
        self.xval = x
        self.yval = y
        self.time = time
        self.angle = angle
        self.label = str(angle)+' Degrees'
        self.color = color


# Variables
fig1, ax = plt.subplots()
camera = Camera(fig1)
x = np.arange(0, 200, .01)

angles = np.array((20, 30, 45, 60, 70, 90))
colors = ["red", "yellow", "blue", "green", "magenta", "black"]
classlist = []
threadlist = []

print("Calculating each line.")

for x in range(len(angles)):
    classlist.append(xypair(angles[x], colors[x]))

for x in classlist:
    ax.plot(x.xval[0], x.yval[0], x.color, label=x.label)

ax.set_xlabel("Distance")
ax.set_ylabel("Height")
ax.set_title("Trajectory with speed 100 m/s")
ax.legend()

for z in range(1, 53):
    for m in range(len(classlist)):
        ax.plot(classlist[m].xval[:z], classlist[m].yval[:z], color=classlist[m].color)
    camera.snap()

threadlist.append(threading.Thread(target=figsaver, args=(fig1, "trajectory_graph.pdf",)))
threadlist.append(threading.Thread(target=threadfunc, args=(camera, ('two.gif', 'imagemagick'))))
threadlist[0].start()
threadlist[1].start()

fig2, ax2 = plt.subplots()
camera2 = Camera(fig2)
ax2.set_xlabel("Time")
ax2.set_ylabel("Height")
ax2.set_title("Trajectory with speed 100 m/s")

for x in classlist:
    ax2.plot(x.time[0], x.yval[0], x.color, label=x.label)

ax2.legend()

for z in range(1, 53):
    for m in classlist:
        ax2.plot(m.time[:z], m.yval[:z], color=m.color)
    camera2.snap()

threadlist.append(threading.Thread(target=figsaver, args=(fig2, "height_over_time_graph.pdf")))
threadlist.append(threading.Thread(target=threadfunc, args=(camera2, ('one.gif', 'imagemagick'))))
threadlist[2].start()
threadlist[3].start()
print("Saving PDF and .gif files asynchronously in "+str(len(threadlist))+" threads.")

for thread in threadlist:
    thread.join()

timetwo = time.time()

print("With multithreading that took "+str(timetwo-timeone)+' seconds in '+str(len(threadlist))+' Threads')

Когда я использую .show () метод, графики правильные. Когда я использую .savefig () в figsaver, он выглядит совершенно иначе в формате PDF. Graph Theres PDF Graph И это метод .show ().

Я также получаю ошибку подпроцесса, говоря, что imagemagi c вернул ненулевое значение из one.gif в anim.save ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...