美文网首页
PythonLog171104

PythonLog171104

作者: 迟客 | 来源:发表于2017-11-04 17:42 被阅读0次

    1、工具

    • Pycharm格式化代码快捷键:Ctrl+Alt+L;
    • SublimeText配置Python环境
    推荐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
    以及官方文档

    以上

    • 推荐这位作者的博客,蛮有意思的,可以提供一些学习的思路。比如,以后可以尝试学着翻译一些英文文档。
    • R和Matlab也在接触了,语法和Python类似,或许试着用不同方法解决同一问题也蛮有意思。

    相关文章

      网友评论

          本文标题:PythonLog171104

          本文链接:https://www.haomeiwen.com/subject/qwgapxtx.html