PythonLog171104

2017-11-04  本文已影响0人  迟客

1、工具

推荐package

SublimeREPL快捷键配置:
Preference——Keybinding处添加

[
    {"keys":["f1"],
    "caption": "SublimeREPL: Python",
    "command": "run_existing_window_command", 
    "args":{
    "id": "repl_python",
    "file": "config/Python/Main.sublime-menu"
    }
    },
    {"keys":["f2"],
    "caption": "SublimeREPL: Python - RUN current file",
    "command": "run_existing_window_command", 
    "args":{
    "id": "repl_python_run",
    "file": "config/Python/Main.sublime-menu"
    }
    }
]

2、Turtle库

参考教程:10分钟轻松学会 Python turtle 绘图

python2.6版本中后引入的一个简单的绘图工具,叫做海龟绘图(Turtle Graphics),turtle库是python的内部库,使用导入即可

绘图命令

操纵海龟绘图有着许多的命令,这些命令可以划分为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.speed(speed) 画笔绘制的速度范围[0,10]整数
turtle.circle() 画圆,半径为正(负),表示圆心在画笔的左边(右边)画圆

(2)画笔控制命令:

命令 说明
turtle.pensize(width) 绘制图形时的宽度
turtle.pencolor() 画笔颜色
turtle.fillcolor(colorstring) 绘制图形的填充颜色
turtle.color(color1, color2) 同时设置pencolor=color1, fillcolor=color2
turtle.filling() 返回当前是否在填充状态
turtle.begin_fill() 准备开始填充图形
turtle.end_fill() 填充完成;
turtle.hideturtle() 隐藏箭头显示;
turtle.showturtle() 与hideturtle()函数对应

(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的参数也是可选项

turtle.circle(radius, extent=None, steps=None)
描述: 以给定半径画圆
参数:
radius(半径); 半径为正(负),表示圆心在画笔的左边(右边)画圆
extent(弧度) (optional);
steps (optional) (做半径为radius的圆的内切正多边形,多边形边数为steps)

举例:
circle(50) # 整圆;
circle(50,steps=3) # 三角形;
circle(120, 180) # 半圆

以下是用turtle 画的一个圆内摆线

import turtle
import math

ttl = turtle.Turtle()


def drawCircle(r):
    ttl.hideturtle()
    ttl.speed(100)
    ttl.penup()
    ttl.right(90)
    ttl.forward(r)
    ttl.right(-90)
    ttl.pendown()
    ttl.color('blue')
    ttl.circle(r, 360)


def drawFnScaled(ttl, sin, cos, lower, upper, step):
    ttl.penup()
    t = lower
    x = sin(t) * 3 / 2 + sin(3 * t / 2)
    y = cos(t) * 3 / 2 - cos(3 * t / 2)
    scaledX = x * 100
    scaledY = y * 100
    ttl.goto(scaledX, scaledY)
    ttl.pendown()
    ttl.color('red')
    ttl.speed(5)
    while t < upper:
        t = t + step
        x = sin(t) * 3 / 2 + sin(3 * t / 2)
        y = cos(t) * 3 / 2 - cos(3 * t / 2)
        scaledX, scaledY = x * 100, y * 100
        ttl.goto(scaledX, scaledY)
    ttl.penup()

drawCircle(200)
drawFnScaled(ttl, math.sin, math.cos, 0, 4 * math.pi, 0.01)
turtle.done()
输出图像

Turtle保存gif,不知道怎么保存,知乎上的回答,好像不能保存gif

ts = turtle.getscreen()
ts.getcanvas().postscript(file="duck.jpg")

####3、Matplotlib绘简单动态图

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from matplotlib.ticker import MultipleLocator

fig = plt.figure()
ax = plt.gca()

xdata, ydata = [], []
x1data, y1data = [], []
ln, = plt.plot([], [], animated=True)
ln1, = plt.plot([], [], animated=True, color='red')
ln2, = plt.plot([], [], animated=True)
ln3, = plt.plot([], [], animated=True)

ax.set_xlim(- np.pi, np.pi)
ax.set_ylim(- np.pi, np.pi)
ax.xaxis.set_major_locator(MultipleLocator(0.5))
ax.yaxis.set_major_locator(MultipleLocator(0.5))

theta = np.arange(-7 / 20 * np.pi, 73 / 20 * np.pi, np.pi / 20)
# 大圆
x0 = 2 * np.cos(theta)
y0 = 2 * np.sin(theta)
# 中圆
x = 3 / 2 * np.cos(-theta + np.pi / 2)
y = 3 / 2 * np.sin(-theta + np.pi / 2)
# 五角星1
x1 = np.sin(theta) * 3 / 2 + np.sin(3 * theta / 2)
y1 = np.cos(theta) * 3 / 2 - np.cos(3 * theta / 2)
# 五角星2
x11 = np.sin(theta + 2 * np.pi) * 3 / 2 + np.sin(3 * (theta + 2 * np.pi) / 2)
y11 = np.cos(theta + 2 * np.pi) * 3 / 2 - np.cos(3 * (theta + 2 * np.pi) / 2)


# 小圆颜色


def init():
    return ln, ln1, ln2, ln3,


def update(num):
    # 小圆
    xdata = x[num] + np.cos(theta) / 2
    ydata = y[num] + np.sin(theta) / 2
    plts1, = ax.fill(xdata, ydata, 'b')
    ln.set_data(xdata, ydata)
    # 五角星
    x1data.append(x1[num])
    y1data.append(y1[num])
    ln1.set_data(x1data, y1data)
    # 连线
    x2, y2 = x[num], y[num]
    x3, y3 = x1[num], y1[num]
    x4, y4 = x11[num], y11[num]
    ln2.set_data([x2, x3], [y2, y3])
    ln3.set_data([x2, x4], [y2, y4])
    if num == 79:
        plts2, = ax.fill(x1, y1, 'r')
    else:
        plts2, = ax.fill(x1, y1, 'none')
    plts, = plt.plot(x0, y0, color='blue')
    return ln, ln1, ln2, ln3, plts, plts1, plts2,


ani = animation.FuncAnimation(fig, update, frames=80,
                              init_func=init, interval=50, blit=True, repeat=False)
plt.show()
# ani.save('1.gif', fps=4, writer='imagemagick')
直接运行的效果 imagemagick保存的图

PS:
应该是代码的问题,加颜色后,直接用imagemagic保存的图和运行时看到的不太一样。

Matplotlib参考文档
Matplotlib Tutorial(译)
Matplotlib tutorial
以及官方文档

以上

上一篇下一篇

猜你喜欢

热点阅读