当前位置: 首页 > 科技观察

奇技淫巧——Python画出各种简单又漂亮的曲线

时间:2023-03-21 16:06:47 科技观察

matplotlib是著名的Python绘图库,它提供了一套完整的绘图API,非常适合交互式绘图,解决数据分析和可视化问题其实是Python的强项。此外,在数据处理过程中使用了numpy。例如绘制指定区间的多项式函数:Python代码如下:importnumpyasnpimportmatplotlib.pyplotaspltX=np.linspace(-4,4,1024)Y=.25*(X+4.)*(X+1.)*(X-2.)plt.title('$f(x)=\\frac{1}{4}(x+4)(x+1)(x-2)$')plt.plot(X,Y,c='g')plt.show()使用numpy的linspace方法确定横坐标x的取值范围,列出方程,然后调用matplotlib的pyplot绘制函数曲线。numpy是一个用python实现的科学计算包,包括强大的N维数组对象Array和成熟的函数库。它有一个集成C/C++和Fortran代码的工具包,并提供实用的线性代数和傅里叶变换。而随机数生成函数等工具,可以理解为Matlab。那些看似抽象的数学公式,其实只是因为不知道它们的应用场景。Python代码如下:importnumpyasnpimportmatplotlib.pyplotaspltX=np.linspace(0,2*np.pi,100)YSinValues=np.sin(X)YCosValues=np.cos(X)plt.plot(X,YSinValues)plt.plot(X,YCosValues)plt.show()Matplotlib是Python的2D绘图库,它甚至可以生成出版质量的图形。对于这些正态分布,Python绘图相当简单:importnumpyasnpimportmatplotlib.pyplotaspltdefpdf(X,mu,sigma):a=1./(sigma*np.sqrt(2.*np.pi))b=-1./(2.*sigma**2)returna*np.exp(b*(X-mu)**2)X=np.linspace(-6,6,1000)foriinrange(3):samples=np.random.standard_normal(10)mu,sigma=np.mean(samples),np.std(samples)plt.plot(X,pdf(X,mu,sigma),color='.66')plt.plot(X,pdf(X,0.,1.),color='b')plt.show()为了不显得单调,这里多画了几条曲线。只要计算出方差和均值,从excel中读出的值就可以符合正态分布。在直角坐标系下,爱情线方程的python表达式为:x**2+y**2+a*x=a*sqrt(x**2+y**2)andx**2+y**2-a*x=a*sqrt(x**2+y**2)通过x找到对应的y值很麻烦,就像软件设计中的“万能层”一样,可以用参数方程来表达:x=a*(2*cos(t)-cos(2*t))y=a*(2*sin(t)-sin(2*t))具体Python代码如下:importnumpyasnpimportmatplotlib.pyplotasplta=1t=np.linspace(0,2*np.pi,1024)X=a*(2*np.cos(t)-np.cos(2*t))Y=a*(2*np.sin(t)-np.sin(2*t))plt.plot(Y,X,color='r')plt.show()表示心脏的心形线来了:但不是六行代码?不是r=a(1-sinθ)吗?确实是极坐标系,python的matplotlib也支持极坐标系。心线的六行pyton代码如下:这样得到下图:心形线确实充满了爱,如果融入了悲伤的呢子布呢?这样又得到了另一条爱情线:网上有各种漂亮的爱情线实现,也充满了各种情感,但是对于每一种,基本上都可以用python实现比较简洁。其实画图很简单,难点在于那些曲线方程的表达和实际的应用场景需求,比如螺旋线。作为数据分析乃至大数据处理的最后一个环节,也就是所谓的洞察可视化,Python可以说是简单实用的工具之一。