Turtle庫是Python語言中一個很流行的繪制圖像的函數(shù)庫,想象一個小烏龜,在一個橫軸為x、縱軸為y的坐標系原點,(0,0)位置開始,它根據(jù)一組函數(shù)指令的控制,在這個平面坐標系中移動,從而在它爬行的路徑上繪制了圖形。
成都創(chuàng)新互聯(lián)公司是一家專業(yè)提供瓦房店企業(yè)網(wǎng)站建設,專注與成都做網(wǎng)站、網(wǎng)站設計、成都h5網(wǎng)站建設、小程序制作等業(yè)務。10年已為瓦房店眾多企業(yè)、政府機構等服務。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設計公司優(yōu)惠進行中。
畫布就是turtle為我們展開用于繪圖區(qū)域,我們可以設置它的大小和初始位置。
設置畫布大小
turtle.screensize(canvwidth=None, canvheight=None, bg=None),參數(shù)分別為畫布的寬(單位像素), 高, 背景顏色。
如:turtle.screensize(800,600, "green")
turtle.screensize() #返回默認大小(400, 300)
turtle.setup(width=0.5, height=0.75, startx=None, starty=None),參數(shù):width, height: 輸入寬和高為整數(shù)時, 表示像素; 為小數(shù)時, 表示占據(jù)電腦屏幕的比例,(startx, starty): 這一坐標表示矩形窗口左上角頂點的位置, 如果為空,則窗口位于屏幕中心。
如:turtle.setup(width=0.6,height=0.6)
turtle.setup(width=800,height=800, startx=100, starty=100)
2.1 畫筆的狀態(tài)
在畫布上,默認有一個坐標原點為畫布中心的坐標軸,坐標原點上有一只面朝x軸正方向小烏龜。這里我們描述小烏龜時使用了兩個詞語:坐標原點(位置),面朝x軸正方向(方向), turtle繪圖中,就是使用位置方向描述小烏龜(畫筆)的狀態(tài)。
2.2 畫筆的屬性
畫筆(畫筆的屬性,顏色、畫線的寬度等)
1) turtle.pensize():設置畫筆的寬度;
2) turtle.pencolor():沒有參數(shù)傳入,返回當前畫筆顏色,傳入?yún)?shù)設置畫筆顏色,可以是字符串如"green", "red",也可以是RGB 3元組。
3) turtle.speed(speed):設置畫筆移動速度,畫筆繪制的速度范圍[0,10]整數(shù),數(shù)字越大越快。
2.3 繪圖命令
操縱海龜繪圖有著許多的命令,這些命令可以劃分為3種:一種為運動命令,一種為畫筆控制命令,還有一種是全局控制命令。
(1) 畫筆運動命令
(2) 畫筆控制命令
(3) 全局控制命令
(4) 其他命令
3. 命令詳解
3.1 turtle.circle(radius, extent=None, steps=None)
描述:以給定半徑畫圓
參數(shù):
radius(半徑):半徑為正(負),表示圓心在畫筆的左邊(右邊)畫圓;
extent(弧度) (optional);
steps (optional) (做半徑為radius的圓的內(nèi)切正多邊形,多邊形邊數(shù)為steps)。
舉例:
circle(50) # 整圓;
circle(50,steps=3) # 三角形;
circle(120, 180) # 半圓
實例:
1、太陽花
2、五角星
3、時鐘程序
根據(jù)圓的面積公式和周長公式,導入math庫獲得Π的值(math.pi),利用input函數(shù)獲得圓的半徑值,編寫計算公式,利用format()函數(shù)指定字符串格式輸出含兩位小數(shù)的圓的面積和周長。代碼如下:
主要含義:
將程序設計和數(shù)學巧妙地結合起來,從簡單的項目開始,應用Python解決高中和大學低年級的數(shù)學問題,比如幾何、概率、統(tǒng)計以及微積分等,為進一步學習更復雜的數(shù)學內(nèi)容以及Python編程語言打下堅實的基礎。
本書也可作為Python初學者的入門讀物,通過學習書中的示例程序和完成那些編程挑戰(zhàn),讀者可以提高自己的編程能力和技巧。
Python由荷蘭數(shù)學和計算機科學研究學會的吉多·范羅蘇姆于1990年代初設計,作為一門叫做ABC語言的替代品。Python語法和動態(tài)類型,以及解釋型語言的本質(zhì),使它成為多數(shù)平臺上寫腳本和快速開發(fā)應用的編程語言。
今天開始琢磨用Python畫圖,沒使用之前是一臉懵的,我使用的開發(fā)環(huán)境是Pycharm,這個輸出的是一行行命令,這個圖畫在哪里呢?
搜索之后發(fā)現(xiàn),它會彈出一個對話框,然后就開始畫了,比如下圖
第一個常用的庫是Turtle,它是Python語言中一個很流行的繪制圖像的函數(shù)庫,這個詞的意思就是烏龜,你可以想象下一個小烏龜在一個x和y軸的平面坐標系里,從原點開始根據(jù)指令控制,爬行出來就是繪制的圖形了。
它最常用的指令就是旋轉(zhuǎn)和移動,比如畫個圓,就是繞著圓心移動;再比如上圖這個怎么畫呢,其實主要就兩個命令:
turtle.forward(200)
turtle.left(170)
第一個命令是移動200個單位并畫出來軌跡
第二個命令是畫筆順時針轉(zhuǎn)170度,注意此時并沒有移動,只是轉(zhuǎn)角度
然后呢? 循環(huán)重復就畫出來這個圖了
好玩吧。
有需要仔細研究的可以看下這篇文章 ,這個牛人最后用這個庫畫個移動的鐘表,太贊了。
Turtle雖好玩,但是我想要的是我給定數(shù)據(jù),然后讓它畫圖,這里就找到另一個常用的畫圖的庫了。
Matplotlib是python最著名的繪圖庫,它提供了一整套和matlab相似的命令API,十分適合交互式地行制圖。其中,matplotlib的pyplot模塊一般是最常用的,可以方便用戶快速繪制二維圖表。
使用起來也挺簡單,
首先import matplotlib.pyplot as plt?導入畫圖的圖。
然后給定x和y,用這個命令plt.plot(x, y)就能畫圖了,接著用plt.show()就可以把圖形展示出來。
接著就是各種完善,比如加標題,設定x軸和y軸標簽,范圍,顏色,網(wǎng)格等等,在 這篇文章里介紹的很詳細。
現(xiàn)在互聯(lián)網(wǎng)的好處就是你需要什么內(nèi)容,基本上都能搜索出來,而且還是免費的。
我為什么要研究這個呢?當然是為了用,比如我把比特幣的曲線自己畫出來可好?
假設現(xiàn)在有個數(shù)據(jù)csv文件,一列是日期,另一列是比特幣的價格,那用這個命令畫下:
這兩列數(shù)據(jù)讀到pandas中,日期為df['time']列,比特幣價格為df['ini'],那我只要使用如下命令
plt.plot(df['time'], df['ini'])
plt.show()
就能得到如下圖:
自己畫的是不是很香,哈哈!
然后呢,我在上篇文章 中介紹過求Ahr999指數(shù),那可不可以也放到這張圖中呢?不就是加一條命令嘛
plt.plot(df['time'], df['Ahr999'])
圖形如下:
但是,Ahr999指數(shù)怎么就一條線不動啊,?原來兩個Y軸不一致,顯示出來太怪了,需要用多Y軸,問題來了。
繼續(xù)谷歌一下,把第二個Y軸放右邊就行了,不過呢得使用多圖,重新繪制
fig = plt.figure() # 多圖
ax1 = fig.add_subplot(111)
ax1.plot(df['time'], df['ini'], label="BTC price")? #?繪制第一個圖比特幣價格
ax1.set_ylabel('BTC price') #?加上標簽
# 第二個直接對稱就行了
ax2 = ax1.twinx()#?在右邊增加一個Y軸
ax2.plot(df['time'], df['Ahr999'], 'r', label="ahr999")??#?繪制第二個圖Ahr999指數(shù),紅色
ax2.set_ylim([0, 50])# 設定第二個Y軸范圍
ax2.set_ylabel('ahr999')
plt.grid(color="k", linestyle=":")# 網(wǎng)格
fig.legend(loc="center")#圖例
plt.show()
跑起來看看效果,雖然丑了點,但終于跑通了。
這樣就可以把所有指數(shù)都繪制到一張圖中,等等,三個甚至多個Y軸怎么加?這又是一個問題,留給愛思考愛學習的你。
有了自己的數(shù)據(jù),建立自己的各個指數(shù),然后再放到圖形界面中,同時針對異常情況再自動進行提醒,比如要抄底了,要賣出了,用程序做出自己的晴雨表。
###################################
# coding=utf-8
# !/usr/bin/env python
# __author__ = 'pipi'
# ctime 2014.10.11
# 繪制橢圓和圓形
###################################
from matplotlib.patches import Ellipse, Circle
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)
ell1 = Ellipse(xy = (0.0, 0.0), width = 4, height = 8, angle = 30.0, facecolor= 'yellow', alpha=0.3)
cir1 = Circle(xy = (0.0, 0.0), radius=2, alpha=0.5)
ax.add_patch(ell1)
ax.add_patch(cir1)
x, y = 0, 0
ax.plot(x, y, 'ro')
plt.axis('scaled')
# ax.set_xlim(-4, 4)
# ax.set_ylim(-4, 4)
plt.axis('equal') #changes limits of x or y axis so that equal increments of x and y have the same length
plt.show()
你可以試試,謝謝。
import matplotlib.pyplot as plt
from matplotlib.patches import Circle
# 創(chuàng)建一個圖形對象
fig = plt.figure()
# 循環(huán)繪制一百個同心圓
for i in range(100):
# 使用 Circle 類創(chuàng)建圓形,并指定半徑和圓心坐標
circle = Circle(xy=(0, 0), radius=i+1)
# 使用 fig.add_subplot() 方法將圓形添加到圖中
ax = fig.add_subplot(1, 1, 1)
ax.add_patch(circle)
# 調(diào)用 plt.show() 方法顯示圖形
plt.show()