PythonLog171104
2017-11-04 本文已影响0人
迟客
1、工具
- Pycharm格式化代码快捷键:Ctrl+Alt+L;
- SublimeText配置Python环境
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
以及官方文档
以上
- 推荐这位作者的博客,蛮有意思的,可以提供一些学习的思路。比如,以后可以尝试学着翻译一些英文文档。
- R和Matlab也在接触了,语法和Python类似,或许试着用不同方法解决同一问题也蛮有意思。