1. 程式人生 > >利用Python畫圖,千變萬化,各種畫圖技巧!

利用Python畫圖,千變萬化,各種畫圖技巧!

作用 etc div 關系 stat rtl 直接 灰色 通用函數

技術分享圖片

如圖所示,利用Python的turtle畫了一個美國隊長盾牌的標誌:

# 所需依賴:python3 sublime

Python代碼:

# print 打印

print(‘hello world!‘)

# 註釋符號

# 井號後面灰色的內容是註釋,相當於筆記,會被機器忽略技術分享圖片

# 變量和值

# n 是變量, 100 是值,等號的作用是賦值

# n 相當於高中數學的 xyz ,只不過 xyz 的值只能是數字,變量的功能要更強大

n = 100

m = ‘hello‘

print(n)

print(m)

# 數據類型,這裏只講兩個,剩下的需要同學自己去系統地學習了

# 字符串 和 整數

# 100 是整數類型

# ‘hello‘ 是字符串類型

# 導入 turtle 模塊

# 模塊是 python 自帶的工具箱,這裏將工具箱導入就能使用了

# turtle 模塊是 python 用來畫圖的工具箱

import turtle

# 將 turtle 裏的工具拿出來,賦給 t 變量

# 照貓畫虎用就是了,這些東西要到很後面才能理解

t = turtle.Turtle()

# 這一行用來加快畫筆速度,從 1~9 依次變快,但 0 是最快

t.speed(0)

# 這是向前走,單位是像素

t.forward(100)

# 這是轉彎,單位是角度

t.right(120)

t.forward(100)

t.right(120)

t.forward(100)

t.right(120)

# 復制三次,就畫了一個三角形

# 正方形

# 長方形

# 如果我們需要改變三角形的邊長怎麽辦?

# 這就要用到變量了,到時候只需改變變量就能改變長度

# 如果有相同的變量,後面定義的會覆蓋前面的

l = 200

t.forward(l)

t.right(120)

t.forward(l)

t.right(120)

t.forward(l)

t.right(120)

# for 循環

# 循環還有 while 循環,考慮到用不著就不講了

# 循環用來處理重復的事情

# range() 是一個區間

# range(3) 相當於 0 1 2

# range(5) 相當於 0 1 2 3 4

# i 取的是 range() 裏的值,一次取一個,取一次就循環一次

# 冒號後面必有縮進,縮進的代表是同一個代碼塊

# 照著用就行了,註意一個字符都不能敲錯,不能用中文符號

for i in range(3):

t.forward(l)

t.right(120)

# 如果想畫兩個三角形怎麽辦,再復制一個 for 循環?

# 我們用函數將代碼封裝起來,到時候直接調用就好了

# def 關鍵字用來定義函數, triangle 是函數名

# 必須要有冒號接縮進,函數裏面也是一個代碼塊

def triangle():

for i in range(3):

t.forward(l)

t.right(120)

# 函數的調用

# triangle()

# 函數可以傳遞參數進去

def triangle2(l):

for i in range(3):

t.forward(l)

t.right(120)

# 需要傳遞個參數進去才能調用這個函數

# triangle2(250)

# 定一個函數畫長方形

# 四則運算

# + 加

# - 減

# * 乘

# / 除

# // 整除

# % 取余

# 寫一個畫 n 邊形的通用函數

def polygon(l, n):

angle = 360 / n

for i in range(n):

t.forward(l)

t.right(angle)

# polygon(100, 6)

# 畫一個五角星

def five_star(l):

for i in range(5):

t.forward(l)

t.right(144)

# five_star(100)

# 畫一個圓

# 邊長在 36 以上就是個圓

def circle():

for i in range(36):

t.forward(10)

t.right(15)

# circle()

# 在指定的坐標畫圖

# 比如要在坐標為 (100, 150) 的位置畫個正方形

def square(x, y, l):

t.penup()

t.goto(x, y)

t.pendown()

for i in range(4):

t.forward(l)

t.right(90)

# square(100, 150, 100)

# 將畫筆定位封裝成函數使用,就能有效去除重復代碼

def setpen(x, y):

t.penup()

t.goto(x, y)

t.pendown()

t.setheading(0)

def square(x, y, l):

setpen(x, y)

for i in range(4):

t.forward(l)

t.right(90)

# square(100, 150, 100)

# 畫一排正方形,共五個,間隔 10

# 蠢方法

# square(100, 150, 30)

# square(140, 150, 30)

# square(180, 150, 30)

# square(220, 150, 30)

# square(260, 150, 30)

# 使用 for 循環、函數

def square_line(x, y, l, n, dis):

for i in range(n):

inner_x = x + (l + dis) * i

square(inner_x, y, l)

# square_line(100, 150, 30, 6, 10)

# 畫一個正方形方陣

def square_matrix(x, y, l, n, dis, m):

for i in range(m):

inner_y = y - (l + dis) * i

square_line(x, inner_y, l, n, dis)

# square_matrix(100, 150, 30, 5, 10, 6)

# 填充顏色,給圖形上色

def five_star(l):

t.fillcolor(‘yello‘)

t.begin_fill()

for i in range(5):

t.forward(l)

t.right(144)

t.end_fill()

# five_star(100)

# 字典的簡單用法

# 抽象畫

# for i in range(500):

# t.forward(i)

# t.left(90)

# for i in range(500):

# t.forward(i)

# t.left(91)

colors = [‘red‘, ‘yellow‘, ‘blue‘, ‘green‘]

# for i in range(500):

# t.pencolor(colors[i % 4])

# t.circle(i)

# t.left(91)

# sides = 5

# colors = [‘red‘, ‘yellow‘, ‘blue‘, ‘orange‘, ‘green‘, ‘purple‘]

# for i in range(360):

# t.pencolor(colors[i % sides])

# t.forward(i * 3 / sides + i)

# t.left(360 / sides + 1)

# t.width(i * sides / 200)

# 美隊盾牌

def circle(x, y, r, color):

n = 36

angle = 360 / n

pi = 3.1415926

c = 2 * pi * r

l = c / n

start_x = x - l / 2

start_y = y + r

setpen(start_x, start_y)

t.pencolor(color)

t.fillcolor(color)

t.begin_fill()

for i in range(n):

t.forward(l)

t.right(angle)

t.end_fill()

def five_star(l):

setpen(0, 0)

t.setheading(162)

t.forward(150)

t.setheading(0)

t.fillcolor(‘WhiteSmoke‘)

t.begin_fill()

t.hideturtle()

t.penup()

for i in range(5):

t.forward(l)

t.right(144)

t.end_fill()

def sheild():

circle(0, 0, 300, ‘red‘)

circle(0, 0, 250, ‘white‘)

circle(0, 0, 200, ‘red‘)

circle(0, 0, 150, ‘blue‘)

five_star(284)

sheild()

# 結尾這一行必須有,照著用就行了

turtle.done()

利用Python的turtle畫小豬佩奇

技術分享圖片

Python代碼:

技術分享圖片

利用Python畫折線圖與柱形圖

# 導入 turtle 模塊

# 模塊是 python 自帶的工具箱,將工具箱導入就能使用了

# turtle 是 python 用來畫圖的工具箱

技術分享圖片

代碼:

import turtle

# 創建一個 turtle 實例

# 將 turtle 裏的工具拿出來,賦給 t 變量

# 不懂也沒關系,照貓畫虎用就是了

t = turtle.Turtle()

# 加快畫筆速度,從 1~9 依次變快,但 0 是最快

t.speed(0)

# 向前走,單位是像素

# t.forward(100)

# # 向右彎,單位是角度

# t.right(90)

# # 正方形

# t.forward(100)

# t.right(90)

# t.forward(100)

# t.right(90)

# t.forward(100)

# t.right(90)

#

# # for 循環

# for i in range(4):

# t.forward(100)

# t.right(90)

#

# # 長方形

# for i in range(2):

# t.forward(150)

# t.right(90)

# t.forward(100)

# t.right(90)

#

# # 給圖形上色

# # 跳到指定位置畫圖

#

# # 將畫筆擡起,畫筆不會再畫出線條

# t.penup()

# # 跳到指定坐標上去

# t.goto(100, 100)

# # 將畫筆放下,畫筆又能繼續畫出線條

# t.pendown()

# # 改變畫筆箭頭朝向,默認水平向右,也就是 0

# t.setheading(0)

# # 設置畫筆顏色

# t.pencolor(‘pink‘)

# # 設置填充顏色

# t.fillcolor(‘pink‘)

# # 隱藏畫筆箭頭

# t.hideturtle()

# # 開始填充

# t.begin_fill()

# for i in range(2):

# t.forward(150)

# t.right(90)

# t.forward(100)

# t.right(90)

# # 結束填充

# t.end_fill()

# 全部封裝成函數

def setcolor(color):

t.pencolor(color)

t.fillcolor(color)

t.hideturtle()

def setpen(x, y):

t.penup()

t.goto(x, y)

t.pendown()

t.setheading(0)

def rect(x, y, w, h, color):

setpen(x, y)

setcolor(color)

# 左下角為起點

t.setheading(90)

t.begin_fill()

for i in range(2):

t.forward(h)

t.right(90)

t.forward(w)

t.right(90)

t.end_fill()

# 裏面是一周的天氣溫度

temps = [16, 17, 22, 30, 21, 27, 24]

# 繪制天氣溫度折線圖

def line_chart(x, y, color, temps, pixel, space):

setcolor(color)

setpen(x, y)

for i, j in enumerate(temps):

# 求出每個點的坐標,直接 goto

x1 = x + (i + 1) * space

y1 = y + j * pixel

dot(x1, y1)

def dot(x, y):

t.pencolor(‘black‘)

t.pensize(2)

t.goto(x, y)

t.begin_fill()

t.circle(4)

t.end_fill()

# line_chart(0, 0, ‘pink‘, temps, 10, 50)

# 繪制天氣溫度柱形圖

def bar_chart(x, y, color, temps, w=500, h=300, space=30):

axises_wh(x, y, w, h)

bg_ruler(x, y, w, h)

n = len(temps)

m = max(temps)

width = (w - (n + 1) * space) / n

pixel = h * 0.95 / m

for i, j in enumerate(temps):

height = j * pixel

x1 = x + space + (width + space) * i

# css顏色代碼對照表

# if j > 30:

# color = ‘#FF2D2D‘

# elif 25 < j < 31:

# color = ‘#FF8000‘

# elif 20 < j < 26:

# color = ‘#FFD306‘

# else:

# color = ‘#8080C0‘

rect(x1, y, width, height, color)

color = ‘pink‘

s = space + width

offset = space + width / 2

line_chart(x, y, color, temps, pixel, s, offset)

def axises_wh(x, y, w, h):

setpen(x, y)

setcolor(‘grey‘)

t.goto(x + w, y)

setpen(x, y)

t.goto(x, y + h)

setpen(x, y)

def bg_ruler(x, y, w, h):

setpen(x, y)

setcolor(‘grey‘)

h = h / 7

for i in range(6):

y1 = y + h * (i + 1)

setpen(x, y1)

t.forward(w)

def line_chart(x, y, color, temps, pixel, space, offset):

setcolor(color)

x = x + offset

y1 = y + temps[0] * pixel

setpen(x, y1)

dot(x, y1)

for i, j in enumerate(temps[1:]):

# 求出每個點的坐標,直接 goto

x1 = x + (i + 1) * space

y1 = y + j * pixel

dot(x1, y1)

bar_chart(-100, -200, ‘GreenYellow‘, temps)

# 選講

# 一些好玩的圖形

def fun():

for i in range(500):

t.forward(i)

t.left(90)

def fun2():

for i in range(500):

t.forward(i)

t.left(91)

def fun3():

colors = [‘red‘, ‘yellow‘, ‘blue‘, ‘green‘]

for i in range(500):

# 可以指定畫筆的顏色

t.pencolor(colors[i % 4])

# turtle 自帶的畫圓函數

t.circle(i)

t.left(91)

# 難以解釋

def fun4():

sides = 5

colors = [‘red‘, ‘yellow‘, ‘blue‘, ‘orange‘, ‘green‘, ‘purple‘]

for i in range(360):

t.pencolor(colors[i % sides])

t.forward(i * 3 / sides + i)

t.left(360 / sides + 1)

t.width(i * sides / 200)

# 美隊盾牌

# 畫一個五角星,並填充顏色

def five_star(l, color):

setcolor(color)

t.begin_fill()

for i in range(5):

t.forward(l)

t.right(144)

t.end_fill()

# 畫四個同心圓

def polygon(l, n):

angle = 360 / n

for i in range(n):

t.forward(l)

t.right(angle)

def circle(l, color):

setcolor(color)

t.begin_fill()

polygon(l, 36)

t.end_fill()

def conc_circle(x, y, r, color):

# 通過周長求出邊

pi = 3.1415926

c = 2 * pi * r

l = c / 36

start_x = x - l / 2

start_y = y + r

setpen(start_x, start_y)

circle(l, color)

# 畫中間的五角星

def center_star(x, y, l):

setpen(x, y)

t.setheading(162)

t.forward(150)

t.setheading(0)

five_star(l, ‘white‘)

def sheild():

conc_circle(0, 0, 300, ‘red‘)

conc_circle(0, 0, 250, ‘white‘)

conc_circle(0, 0, 200, ‘red‘)

conc_circle(0, 0, 150, ‘blue‘)

center_star(0, 0, 284)

sheild()

turtle.done()

利用Python畫圖,千變萬化,各種畫圖技巧!