动画中的抗锯齿字体

3

我试图创建一个包含两个子图的动画——一个是3D的,另一个是2D的。然而,我似乎无法找到一种方法来获得更好的2D坐标轴字体渲染效果。我尝试使用font_manager的各种设置,甚至将frame_format更改为原始格式,但都没有成功。有人有什么想法如何解决这个问题吗?我在mpeg4中得到了相同的结果。

奇怪的是,3D图形似乎能正确呈现字体。
import numpy as np

import matplotlib
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from mpl_toolkits.mplot3d import Axes3D

w, h = matplotlib.figure.figaspect(.5)
fig = plt.figure(figsize=(w,h))

ax3d  = fig.add_subplot(121, projection='3d')
ax2d  = fig.add_subplot(122)

ax3d.set_xlim(-3, 3)
ax3d.set_ylim(-3, 3)
ax3d.azim = -90
ax3d.elev = 0
ax3d.set_title('Car on Parking Ramp')

ax2d.set_xlim(-20,20)
ax2d.set_ylim(-20,20)
ax2d.set_ylabel('y')
ax2d.set_xlabel('x')
ax2d.set_title('Intersection with z=0')

''' Helix '''
K = 3          ## Angular velocity
H = 2*np.pi    ## Height

t = np.linspace(0, H, 100, endpoint=True)

x = np.cos(K*t)
y = np.sin(K*t)
z = H - t

ax3d.plot(x, y, z, color='k')

''' z = 0 Plane '''
xx, yy = np.meshgrid([-20,20], [-20,20])
ax3d.plot_surface(xx, yy, 0, alpha=0.3, facecolor='b', rstride=1, cstride=1, shade=True)
ax3d.set_axis_off()

''' Tangent Line Data '''
xdata = np.array([ np.cos(K*t), np.cos(K*t) - K*(H - t)*np.sin(K*t) ])
ydata = np.array([ np.sin(K*t), np.sin(K*t) + K*(H - t)*np.cos(K*t) ])

''' Graph Lines '''
proj,     = ax2d.plot([],[])
tangent,  = ax3d.plot([], [], [], color='b')


def update_graph(n, tangent, proj, xdata, ydata):    
    tangent.set_data(xdata[:,n],
                     ydata[:,n])

    tangent.set_3d_properties([H - t[n], 0])

    proj.set_xdata(xdata[1,:n])
    proj.set_ydata(ydata[1,:n])


ani = animation.FuncAnimation(fig, update_graph, len(t), 
                              fargs=(tangent, proj, xdata, ydata), interval=75, blit=True)

ani.save('im.gif', writer='imagemagick', fps=10)
#ani.save('im.mp4', extra_args=['-vcodec', 'libx264'])

Results

1个回答

1
对于遇到相同问题的人来说,这确实与matplotlib后端有关。使用不同的后端可能会有所帮助。在我的情况下,
%matplotlib nbagg

我已经解决了它(感谢链接的问题:将绘图保存为jpeg格式时出现像素化字体)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接