成都网站建设设计

将想法与焦点和您一起共享

python隐函数作图 如何画隐函数图像

Python绘图Turtle库详解

 Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x、纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行的路径上绘制了图形。

成都创新互联公司坚持“要么做到,要么别承诺”的工作理念,服务领域包括:做网站、成都网站建设、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的钟祥网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!

turtle 绘图的基础知识:

1. 画布(canvas)

    画布就是turtle为我们展开用于绘图区域,我们可以设置它的大小和初始位置。

    设置画布大小

turtle.screensize(canvwidth=None, canvheight=None, bg=None),参数分别为画布的宽(单位像素), 高, 背景颜色。

    如:turtle.screensize(800,600, "green")

turtle.screensize() #返回默认大小(400, 300)

    turtle.setup(width=0.5, height=0.75,

startx=None, starty=None),参数:width, height: 输入宽和高为整数时, 表示像素; 为小数时, 表示占据电脑屏幕的比例,(startx, starty): 这一坐标表示矩形窗口左上角顶点的位置, 如果为空,则窗口位于屏幕中心。

    如:turtle.setup(width=0.6,height=0.6)

turtle.setup(width=800,height=800, startx=100, starty=100)

2. 画笔

2.1 画笔的状态

    在画布上,默认有一个坐标原点为画布中心的坐标轴,坐标原点上有一只面朝x轴正方向小乌龟。这里我们描述小乌龟时使用了两个词语:坐标原点(位置),面朝x轴正方向(方向), turtle绘图中,就是使用位置方向描述小乌龟(画笔)的状态。

2.2 画笔的属性

    画笔(画笔的属性,颜色、画线的宽度等)

    1) turtle.pensize():设置画笔的宽度;

    2) turtle.pencolor():没有参数传入,返回当前画笔颜色,传入参数设置画笔颜色,可以是字符串如"green", "red",也可以是RGB 3元组。

    3) turtle.speed(speed):设置画笔移动速度,画笔绘制的速度范围[0,10]整数,数字越大越快。

2.3 绘图命令

     操纵海龟绘图有着许多的命令,这些命令可以划分为3种:一种为运动命令,一种为画笔控制命令,还有一种是全局控制命令。

(1)    画笔运动命令

命令说明

turtle.forward(distance)向当前画笔方向移动distance像素长度

turtle.backward(distance)向当前画笔相反方向移动distance像素长度

turtle.right(degree)顺时针移动degree°

turtle.left(degree)逆时针移动degree°

turtle.pendown()移动时绘制图形,缺省时也为绘制

turtle.goto(x,y)将画笔移动到坐标为x,y的位置

turtle.penup()提起笔移动,不绘制图形,用于另起一个地方绘制

turtle.circle()画圆,半径为正(负),表示圆心在画笔的左边(右边)画圆

setx( )将当前x轴移动到指定位置

sety( )将当前y轴移动到指定位置

setheading(angle)设置当前朝向为angle角度

home()设置当前画笔位置为原点,朝向东。

dot(r)绘制一个指定直径和颜色的圆点

(2)     画笔控制命令

命令说明

turtle.fillcolor(colorstring)绘制图形的填充颜色

turtle.color(color1, color2)同时设置pencolor=color1, fillcolor=color2

turtle.filling()返回当前是否在填充状态

turtle.begin_fill()准备开始填充图形

turtle.end_fill()填充完成

turtle.hideturtle()隐藏画笔的turtle形状

turtle.showturtle()显示画笔的turtle形状

(3)    全局控制命令

命令说明

turtle.clear()清空turtle窗口,但是turtle的位置和状态不会改变

turtle.reset()清空窗口,重置turtle状态为起始状态

turtle.undo()撤销上一个turtle动作

turtle.isvisible()返回当前turtle是否可见

stamp()复制当前图形

turtle.write(s

[,font=("font-name",font_size,"font_type")])

写文本,s为文本内容,font是字体的参数,分别为字体名称,大小和类型;font为可选项,font参数也是可选项

(4)    其他命令

命令说明

turtle.mainloop()或turtle.done()启动事件循环 -调用Tkinter的mainloop函数。

必须是乌龟图形程序中的最后一个语句。

turtle.mode(mode=None)设置乌龟模式(“standard”,“logo”或“world”)并执行重置。如果没有给出模式,则返回当前模式。

模式初始龟标题正角度

standard向右(东)逆时针

logo向上(北)顺时针

turtle.delay(delay=None)设置或返回以毫秒为单位的绘图延迟。

turtle.begin_poly()开始记录多边形的顶点。当前的乌龟位置是多边形的第一个顶点。

turtle.end_poly()停止记录多边形的顶点。当前的乌龟位置是多边形的最后一个顶点。将与第一个顶点相连。

turtle.get_poly()返回最后记录的多边形。

求教python一个作图的问题

matplotlib 是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地行制图。而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中。

它的文档相当完备,并且Gallery页面中有上百幅缩略图,打开之后都有源程序。因此如果你需要绘制某种类型的图,只需要在这个页面中浏览/复制/粘贴一下,基本上都能搞定。

在Linux下比较著名的数据图工具还有gnuplot,这个是免费的,Python有一个包可以调用gnuplot,但是语法比较不习惯,而且画图质量不高。

而 Matplotlib则比较强:Matlab的语法、python语言、latex的画图质量(还可以使用内嵌的latex引擎绘制的数学公式)。

本文目录

1. Matplotlib.pyplot快速绘图

2. 面向对象画图

3. Matplotlib.pylab快速绘图

4. 在图表中显示中文

5. 对LaTeX数学公式的支持

6. 对数坐标轴

7. 学习资源

Matplotlib.pyplot快速绘图

快速绘图和面向对象方式绘图

matplotlib实际上是一套面向对象的绘图库,它所绘制的图表中的每个绘图元素,例如线条Line2D、文字Text、刻度等在内存中都有一个对象与之对应。

为了方便快速绘图matplotlib通过pyplot模块提供了一套和MATLAB类似的绘图API,将众多绘图对象所构成的复杂结构隐藏在这套API内部。我们只需要调用pyplot模块所提供的函数就可以实现快速绘图以及设置图表的各种细节。pyplot模块虽然用法简单,但不适合在较大的应用程序中使用。

为了将面向对象的绘图库包装成只使用函数的调用接口,pyplot模块的内部保存了当前图表以及当前子图等信息。当前的图表和子图可以使用plt.gcf()和plt.gca()获得,分别表示"Get Current Figure"和"Get Current Axes"。在pyplot模块中,许多函数都是对当前的Figure或Axes对象进行处理,比如说:

plt.plot()实际上会通过plt.gca()获得当前的Axes对象ax,然后再调用ax.plot()方法实现真正的绘图。

可以在Ipython中输入类似"plt.plot??"的命令查看pyplot模块的函数是如何对各种绘图对象进行包装的。

配置属性

matplotlib所绘制的图表的每个组成部分都和一个对象对应,我们可以通过调用这些对象的属性设置方法set_*()或者pyplot模块的属性设置函数setp()设置它们的属性值。

因为matplotlib实际上是一套面向对象的绘图库,因此也可以直接获取对象的属性

配置文件

绘制一幅图需要对许多对象的属性进行配置,例如颜色、字体、线型等等。我们在绘图时,并没有逐一对这些属性进行配置,许多都直接采用了matplotlib的缺省配置。

matplotlib将这些缺省配置保存在一个名为“matplotlibrc”的配置文件中,通过修改配置文件,我们可以修改图表的缺省样式。配置文件的读入可以使用rc_params(),它返回一个配置字典;在matplotlib模块载入时会调用rc_params(),并把得到的配置字典保存到rcParams变量中;matplotlib将使用rcParams字典中的配置进行绘图;用户可以直接修改此字典中的配置,所做的改变会反映到此后创建的绘图元素。

绘制多子图(快速绘图)

Matplotlib 里的常用类的包含关系为 Figure - Axes - (Line2D, Text, etc.)一个Figure对象可以包含多个子图(Axes),在matplotlib中用Axes对象表示一个绘图区域,可以理解为子图。

可以使用subplot()快速绘制包含多个子图的图表,它的调用形式如下:

subplot(numRows, numCols, plotNum)

subplot将整个绘图区域等分为numRows行* numCols列个子区域,然后按照从左到右,从上到下的顺序对每个子区域进行编号,左上的子区域的编号为1。如果numRows,numCols和plotNum这三个数都小于10的话,可以把它们缩写为一个整数,例如subplot(323)和subplot(3,2,3)是相同的。subplot在plotNum指定的区域中创建一个轴对象。如果新创建的轴和之前创建的轴重叠的话,之前的轴将被删除。

subplot()返回它所创建的Axes对象,我们可以将它用变量保存起来,然后用sca()交替让它们成为当前Axes对象,并调用plot()在其中绘图。

绘制多图表(快速绘图)

如果需要同时绘制多幅图表,可以给figure()传递一个整数参数指定Figure对象的序号,如果序号所指定的Figure对象已经存在,将不创建新的对象,而只是让它成为当前的Figure对象。

import numpy as np

import matplotlib.pyplot as plt

plt.figure(1) # 创建图表1

plt.figure(2) # 创建图表2

ax1 = plt.subplot(211) # 在图表2中创建子图1

ax2 = plt.subplot(212) # 在图表2中创建子图2

x = np.linspace(0, 3, 100)

for i in xrange(5):

plt.figure(1)  #❶ # 选择图表1

plt.plot(x, np.exp(i*x/3))

plt.sca(ax1)   #❷ # 选择图表2的子图1

plt.plot(x, np.sin(i*x))

plt.sca(ax2)  # 选择图表2的子图2

plt.plot(x, np.cos(i*x))

plt.show()

在图表中显示中文

matplotlib的缺省配置文件中所使用的字体无法正确显示中文。为了让图表能正确显示中文,可以有几种解决方案。

在程序中直接指定字体。

在程序开头修改配置字典rcParams。

修改配置文件。

matplotlib输出图象的中文显示问题

上面那个link里的修改matplotlibrc方式,我试了好几次都没成功。能work的一个比较简便粗暴的方式(但不知道有没有副作用)是,1.找到字体目录YOURPYTHONHOME\Lib\site-packages\matplotlib\mpl-data\fonts\ttf下的Vera.ttf。这里我们用中文楷体(可以从windows/system32/fonts拷贝过来,对于win8字体文件不是ttf的可以从网上下一个微软雅黑),直接张贴到前面的ttf目录下,然后更名为Vera.ttf。2. 中文字符串用unicode格式,例如:u''测试中文显示'',代码文件编码使用utf-8 加上" # coding = utf-8  "一行。

面向对象画图

matplotlib API包含有三层,Artist层处理所有的高层结构,例如处理图表、文字和曲线等的绘制和布局。通常我们只和Artist打交道,而不需要关心底层的绘制细节。

直接使用Artists创建图表的标准流程如下:

创建Figure对象

用Figure对象创建一个或者多个Axes或者Subplot对象

调用Axies等对象的方法创建各种简单类型的Artists

import matplotlib.pyplot as plt

X1 = range(0, 50) Y1 = [num**2 for num in X1] # y = x^2 X2 = [0, 1] Y2 = [0, 1] # y = x

Fig = plt.figure(figsize=(8,4)) # Create a `figure' instance Ax = Fig.add_subplot(111) # Create a `axes' instance in the figure Ax.plot(X1, Y1, X2, Y2) # Create a Line2D instance in the axes

Fig.show() Fig.savefig("test.pdf")

python 能画隐函数的曲面吗

可以的。这也算多态的一种,比如: def duck(A):return A.duck() class pop():def duck():return "what does the duck say~" class regular():def duck():return "Quack!" duck(pop)'what does the duck s

不能直接写出函数的表达式 怎么在python里画函数图象呢?

不写出y=f(x)这样的表达式,由隐函数的等式直接绘制图像,以x²+y²+xy=1的图像为例,使用sympy间接调用matplotlib工具的代码和该二次曲线图像如下(注意python里的乘幂符号是**而不是^,还有,python的sympy工具箱的等式不是a==b,而是a-b或者Eq(a,b),这几点和matlab的区别很大)

直接在命令提示行的里面运行代码的效果

from sympy import *;

x,y=symbols('x y');

plotting.plot_implicit(x**2+y**2+x*y-1);

Python作图程序

实战小程序:画出y=x^3的散点图

样例代码如下:

[python] view plain copy

#coding=utf-8

import pylab as y    #引入pylab模块

x = y.np.linspace(-10, 10, 100)  #设置x横坐标范围和点数

y.plot(x, x*x*x,'or')  #生成图像

ax = y.gca()

ax.spines['right'].set_color('none')

ax.spines['top'].set_color('none')

ax.xaxis.set_ticks_position('bottom')

ax.spines['bottom'].set_position(('data', 0))

ax.yaxis.set_ticks_position('left')

ax.spines['left'].set_position(('data', 0))

ax.set_yticks([-1000, -500, 500, 1000])

y.xlim(x.min() , x.max() ) #将横坐标设置为x的最大值和最小值

y.show() #显示图像

[python] view plain copy

import pylab as y

程序中引入的pylab属于matplotlib的一个模块,将其名字用y代替,其中包括了许多NumPy和pyplot模块中常用的函数,方便用户快速进行计算和绘图,十分适合在IPython交互式环境中使用。

[python] view plain copy

y.np.linspace(-10, 10, 100)

此为numpy中的一个函数,返回的是等间距的值,numpy.linspace(a,b,c):a指的是开始位置,b表示的是结束位置,c表示产生点的个数(默认为50)

举例:

[python] view plain copy

np.linspace(2.0, 3.0, num=5)

array([ 2.  ,  2.25,  2.5 ,  2.75,  3.  ])

[python] view plain copy

y.plot(x, x*x*x,'or')  #生成图像

后面加上‘o'表示为散点图

'r'可设置颜色为红色,基本上和matlab的操作很像。

[python] view plain copy

y.xlim(x.min(), x.max())

这条语句使用了xlim函数,将横坐标设置为x的大小


本文名称:python隐函数作图 如何画隐函数图像
标题来源:http://chengdu.cdxwcx.cn/article/docgjhd.html