#coding=utf-8
import matplotlib.pyplot as plt
from matplotlib import animation
import numpy as np
import math
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter
import matplotlib.pyplot as plt
import numpy as np
import matplotlib
myfont = matplotlib.font_manager.FontProperties(fname="STHeiti-UltraLight.ttc")
t = 'You are my sunshine\n' \
'my only sunshine.'
np.seterr(invalid='ignore')
figure = plt.figure()
axes = plt.axes(xlim=(-2, 2), ylim=(-2, 2))
line1, = axes.plot([], [], color='red', linewidth=2, label='1')
line2, = axes.plot([], [], color='red', linewidth=2, label='2')
def init():
line1.set_data([], [])
line2.set_data([], [])
return line1, line2
def animate(i):
#print i
t = np.linspace(0, i / math.pi, 100)
x = np.sin(t)
y = np.cos(t) + np.power(x, 2.0 / 3)
line1.set_data(x, y)
line2.set_data(-x, y)
return line1, line2
ani = animation.FuncAnimation(figure, animate, init_func=init, frames=14, interval=200)
# ani.save('Heart.mp4') save as mp4 but need to install video-encoder. i did not install it, so this line makes exeception
plt.title('To my lovely Fairy maiden',fontsize='xx-large',fontweight='bold',fontproperties=myfont)
plt.text(0,0.2,t,fontsize=18,style='oblique',ha='center')
plt.show()
print('\n'.join([''.join([('LoveDaBao'[(x-y)%9]if((x*0.05)**2+(y*0.1)**2-1)**3-(x*0.05)**2*(y*0.1)**3<=0 else' ')for x in range(-30,30)])for y in range(15,-15,-1)]))
myfont = matplotlib.font_manager.FontProperties(fname="STHeiti-UltraLight.ttc")
matplotlib.rcParams['axes.unicode_minus'] = False
def heart_3d(x,y,z):
return (x**2+(9/4)*y**2+z**2-1)**3-x**2*z**3-(9/80)*y**2*z**3
def plot_implicit(fn, bbox=(-1.5, 1.5)):
xmin, xmax, ymin, ymax, zmin, zmax = bbox*3
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
A = np.linspace(xmin, xmax, 100) # resolution of the contour
B = np.linspace(xmin, xmax, 40) # number of slices
A1, A2 = np.meshgrid(A, A) # grid on which the contour is plotted
for z in B: # plot contours in the XY plane
X, Y = A1, A2
Z = fn(X, Y, z)
cset = ax.contour(X, Y, Z+z, [z], zdir='z', colors=('r',))
# [z] defines the only level to plot
# for this contour for this value of z
for y in B: # plot contours in the XZ plane
X, Z = A1, A2
Y = fn(X, y, Z)
cset = ax.contour(X, Y+y, Z, [y], zdir='y', colors=('red',))
for x in B: # plot contours in the YZ plane
Y, Z = A1, A2
X = fn(x, Y, Z)
cset = ax.contour(X+x, Y, Z, [x], zdir='x',colors=('red',))
# must set plot limits because the contour will likely extend
# way beyond the displayed level. Otherwise matplotlib extends the plot limits
# to encompass all values in the contour.
ax.set_zlim3d(zmin, zmax)
ax.set_xlim3d(xmin, xmax)
ax.set_ylim3d(ymin, ymax)
plt.title(u"I love my DaBao",fontproperties=myfont,fontsize='xx-large',fontweight='bold')
plt.axis('off')
plt.show()
if __name__ == '__main__':
plot_implicit(heart_3d)
Matplot--2维、3维心形图
这篇博客通过Python的matplotlib库展示了如何创建动态心形动画和3D图形。代码中使用FuncAnimation函数实现了心形路径的平滑动画,并用3D绘图展示了一个心形的数学表达式。同时,博客还包含了自定义字体和图形标题的设置,以及额外的字符艺术图案。
摘要由CSDN通过智能技术生成