Python 画图练习:画一朵好看的玫瑰花

其实是情人节的小礼物(*/ω\*)

Let’s Start

导入需要用到的库

1
2
3
4
5
import matplotlib.pyplot as plt
from matplotlib import cm
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import random

画一朵花花

  • plt.figure():第一个是区分画布的num,figsize定义长宽,单位是英尺,dpi表示pix/inch,所以实际图片的像素大小是两者相乘。
  • cmap:colormap图鉴,_r是指反向。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    fig=plt.figure(2,figsize=(16,9),dpi=150)
    ax=fig.gca(projection='3d')
    [x,t]=np.meshgrid(np.array(range(25))/24.0,
    np.arange(0,575.5,0.5)/575*17*np.pi-2*np.pi)
    p=(np.pi/2)*np.exp(-t/(8*np.pi))
    u=1-(1-np.mod(3.6*t,2*np.pi)/np.pi)**4/2
    y=2*(x**2-x)**2*np.sin(p)
    r=u*(x*np.sin(p)+y*np.cos(p))
    surf=ax.plot_surface(r*np.cos(t),r*np.sin(t),u*(x*np.cos(p)-y*np.sin(p)),
    rstride=1,cstride=1,cmap=plt.cm.RdPu_r)
    plt.axis('off')
    plt.show()

One more thing

如果你想知道背景是怎么画的(「・ω・)「

其实是想画渐变的,奈何渐变只找到了cmap,颜色还不能自己调,所以填满整张图并不好看,最后用了曲线救国的散点图来画。scatter()里面的c可以规定颜色映射的方法,这里用的是椭圆,abcd全置零就是圆了。

1
2
3
4
5
6
7
8
9
10
11
fig= plt.figure(1,figsize=(16,9),dpi=150)
n = 5000
a, b, c, d = 0, 5, 8, 3 #椭圆形的参数
X = np.random.randn(n)*c
Y = np.random.randn(n)*d
ax0=plt.subplot(111)
ax0.scatter(X,Y,s=10,c=((X-a)/c)**2+((Y-b)/d)**2,
cmap='YlOrRd',alpha=0.3, linewidths=0)
plt.axis('equal')
plt.axis('off')
plt.show()