趣玩 Python 之绘制基本图形

简介: 趣玩 Python 之绘制基本图形

Python中的类库极其丰富,数据科学中经常会用到可视化技术。今天我们来一学习一下Python中基本图形的绘制方法,本文我们将主要基于turtle(小乌龟)库来画图~

为了方便后面进行交互性演示,这里我建议大家安装好Anaconda,传送门是


https://www.anaconda.com/distribution/>


请根据自己电脑的操作系统(Windows/Mac/Linux)自行下载和安装,记得要选 Python3.7的版本,因为Python 2.7官方不打算维护了。


image.png


Anaconda安装完毕之后呢,接下来,在电脑的命令行(终端)中输入如下命令:

jupyter notebook来启动notebook,这时会打开浏览器,进入网址http://localhost:8888/tree,其界面如下~


image.png


接下来,我们需要创建一个notebook文件,按下图操作,点Files -> New -> Python 3即可。


image.png


画正方形


现在,我们先画一个正方形试试水~


想象一下,我们现在一个起点o,如何从这个起点o画一个正方形呢?好啦,考虑一下后发现是这样的:


  • 先水平向右画一条直线,长度比如就为100像素吧
  • 画完上一条边后,顺时针旋转90°角,再画一条等长度的边
  • 循环上一步骤几次,正方形就画出来了
  • 最后停止画笔


image.png


画三角形


同理,我们现在一个起点o,如何从这个起点o画一个三角形呢?好啦,考虑一下后发现是这样的:


  • 先水平向右画一条直线,长度比如就为100像素吧
  • 画完上一条边后,逆时针旋转120°角,再画一条等长度的边
  • 接着,顺时针旋转60°角,再画一条等长度的边
  • 最后停止画笔


微信图片_20220212163743.gif


draw-triangle-delay

具体代码是:



# 画三角形 import turtle as timport timet.forward(100)time.sleep(0.2)t.left(120)t.forward(100)time.sleep(0.2)t.right(60)t.backward(100)time.sleep(0.2)
time.sleep(0.3)t.done()


画六边形


画六边形和正方形有点像,我们只需把之前每次画新边时旋转的90°改为60°,并把循环次数改为6即可。


image.png


具体代码是:


# 画六边形import turtleturtle.pensize(2) #设置线的大小for i in range(6): #因为有六条边,所以我们画六次    turtle.fd(100) #前进100个像素单位    turtle.left(60) #向左旋转60度(每一个内角的外角都为60°)turtle.done() # 画布停留


画两个六边形的叠边图


想象一下两个六边形对称性地错位,其特点是,有九条边,小乌龟最后会回到的自己的出发点,所以角度是360°的倍数,又因为有九条边所以我们可以得出每次转角为80°。


于是,画这个叠边图与画六边形有点像,我们只需把之前每次画新边时旋转的60°改为80°,并把循环次数改为9即可。


image.png


其具体的代码为:


# 画 两个六边形叠边图import turtleturtle.pensize(2)for i in range(9):# 因为有九条边,所以我们选择画九次    turtle.fd(150)    turtle.left(80)# 每次转角为80°turtle.done()


画同切圆


首先,同切圆是什么?直接给个图吧,就是这样(多个圆都切于同一条线,比如我们就用水平线):


image.png


怎么画一个同切圆呢?观察后发现可以这么干:

  • 先以一定长度为半径,画一个圆,画完后默认会回到原起点
  • 增大半径,再重复上一步骤
  • 重复上一步骤
  • 最后停止画笔

我们这就画有4个圆同切吧~


image.png


具体代码为:


# 画同切圆import turtleturtle.pensize(2)#以左侧30像素处为圆心绘制360°即绘制一个圆(不给出弧度值则表示默认画一个圆)turtle.circle(30)turtle.circle(40)turtle.circle(50)turtle.circle(60)turtle.done()


画五角星


在草稿纸上画了画之后,我们会发现五角星和正方形的画法类似,旋转角度为144°,边数为5。


image.png


其具体代码为:


# 画五角星
import turtlep = turtlep.pensize(3)for i in range(5):    p.forward(100)    p.left(144)#左转144°turtle.done()


画奥运五环


奥运五环正式版我们就不要求完全一样了,我们只需要画出如下近似的即可~



image.png


观察之后,我们大概可以这样做:

  • 画一个完整的圆,此时画笔回到的起点
    但我们需要将画笔搬到该点关于圆心对称的地方继续画,怎么办呢?这时我们可以使用turtle中的goto(x,y)函数,直接将画笔移动到坐标(x,y)‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬
  • 从新的起点继续画完整的圆,画完后移动画笔,直到画完最开始的3个圆,并按要求为边上色
  • 用同样的方式画完最后两个圆,并按要求为边上色


image.png


其具体代码为:


# 画奥运五环
import turtle
p = turtle
p.pensize(3)
p.color("blue")
p.circle(30,360)
p.pu()
p.goto(60,0)
p.pd()
p.color("black")
p.circle(30,360)
p.pu()
p.goto(120,0)
p.pd()
p.color("red")
p.circle(30,360)
p.pu()
p.goto(90,-30)
p.pd()
p.color("green")
p.circle(30,360)
p.pu()
p.goto(30,-30)
p.pd()
p.color("yellow")
p.circle(30,360)
p.done()


画风轮

最后呢,我们来画一个风轮,其中要求每个风轮内角为45度,风轮边长150像素。



image.png


结合画上一个图的经验,其实我们结合goto(x,y)函数来画4个45°的扇形即可~


image.png

其具体的代码是:



# 画风轮import turtlefor i in range(4):    turtle.fd(100)    turtle.right(90)    turtle.circle(-100,45)    turtle.goto(0,0)    turtle.left(45)turtle.done()


今天,这些知识你都学会了嘛~


总结



今天我们用 turtle 库画了很多基础的图形,都比较简单,大家可以发挥自己的想象力多画一些更好玩的。






目录
相关文章
|
6月前
|
Python
Python基础教程(第3版)中文版 第12章 图形用户界面 (笔记)
Python基础教程(第3版)中文版 第12章 图形用户界面 (笔记)
|
2月前
|
数据可视化 算法 JavaScript
基于图论的时间序列数据平稳性与连通性分析:利用图形、数学和 Python 揭示时间序列数据中的隐藏模式
本文探讨了如何利用图论分析时间序列数据的平稳性和连通性。通过将时间序列数据转换为图结构,计算片段间的相似性,并构建连通图,可以揭示数据中的隐藏模式。文章介绍了平稳性的概念,提出了基于图的平稳性度量,并展示了图分区在可视化平稳性中的应用。此外,还模拟了不同平稳性和非平稳性程度的信号,分析了图度量的变化,为时间序列数据分析提供了新视角。
81 0
基于图论的时间序列数据平稳性与连通性分析:利用图形、数学和 Python 揭示时间序列数据中的隐藏模式
|
5月前
|
Python
在Python中,`tkinter`是一个用于创建图形用户界面(GUI)的标准库。
在Python中,`tkinter`是一个用于创建图形用户界面(GUI)的标准库。
|
6月前
|
开发框架 Python
Python的`pygame`库用于2D游戏开发,涵盖图形、音频和输入处理。
【6月更文挑战第21天】Python的`pygame`库用于2D游戏开发,涵盖图形、音频和输入处理。要开始,先通过`pip install pygame`安装。基本流程包括:初始化窗口、处理事件循环、添加游戏元素(如玩家和敌人)、响应用户输入、更新游戏状态及结束条件。随着项目发展,可逐步增加复杂性。
166 1
|
5月前
|
数据可视化 Linux 数据格式
`seaborn`是一个基于`matplotlib`的Python数据可视化库,它提供了更高级别的接口来绘制有吸引力的和信息丰富的统计图形。`seaborn`的设计目标是使默认图形具有吸引力,同时允许用户通过调整绘图参数来定制图形。
`seaborn`是一个基于`matplotlib`的Python数据可视化库,它提供了更高级别的接口来绘制有吸引力的和信息丰富的统计图形。`seaborn`的设计目标是使默认图形具有吸引力,同时允许用户通过调整绘图参数来定制图形。
|
5月前
|
Python
`matplotlib`是Python中一个非常流行的绘图库,它提供了丰富的绘图接口,包括二维和三维图形的绘制。`Axes3D`是`matplotlib`中用于创建三维坐标轴的对象,而`plot_surface`则是用于在三维空间中绘制表面的函数。
`matplotlib`是Python中一个非常流行的绘图库,它提供了丰富的绘图接口,包括二维和三维图形的绘制。`Axes3D`是`matplotlib`中用于创建三维坐标轴的对象,而`plot_surface`则是用于在三维空间中绘制表面的函数。
|
6月前
|
存储 前端开发 人机交互
23.Python 图形化界面编程
23.Python 图形化界面编程
138 2
|
7月前
|
Python 容器
Python与GUI编程:创建图形用户界面
Python的Tkinter库是用于构建GUI应用的内置工具,无需额外安装。它提供了丰富的控件,如按钮、文本框等,让用户通过图形界面与程序交互。创建GUI窗口的基本步骤包括:导入Tkinter库,创建窗口对象,设置窗口属性,添加控件(如标签和按钮),并使用布局管理器(如`pack()`或`grid()`)来组织控件的位置。此外,可以通过绑定事件处理函数来响应用户操作,例如点击按钮。Tkinter还有更多高级功能,适合开发复杂GUI应用。
|
6月前
|
Java Python
分别使用python和java编写金字塔图形
分别使用python和java编写金字塔图形
|
7月前
|
存储 数据可视化 算法
最新Python-Matplotlib可视化(9)——精通更多实用图形的绘制,2024年最新小米面试题库
最新Python-Matplotlib可视化(9)——精通更多实用图形的绘制,2024年最新小米面试题库
最新Python-Matplotlib可视化(9)——精通更多实用图形的绘制,2024年最新小米面试题库