A. python Matplotlib畫圖
主要用於作圖、可視化問題
pip install matplotlib
導入模塊 pyplot 和 pylab ,可以參考下面鏈接觀察兩者區別:
https://www.cnblogs.com/Shoesy/p/6673947.html
(說白了就是pylay=pyplot+numpy)
輸入這三行解決
主要使用 plot() 來展示,裡面前兩個參數代表 x , y 坐標(注意x,y數量要一樣),第三個參數可以用來設置散點圖( 'o' )或者顏色、線條形式等各種樣式,並且第三個參數可以同時傳入多個,比如要紅色的散點圖就: Ɔr'
(1)顏色樣式:
(2)線條樣式:
(3)點的樣式:
(4)坐標區間:
或者分別設置x、y的區間:
註:
設置點的樣式時默認就是散點圖,以及同類樣式只能設置一個(比如不能設置兩種顏色),並且還可以把多個圖集合在一起展示,那就多 plot 幾個,plot就相當於一個畫布,每plot一個就相當於在上面畫一張圖,再弄就繼續在上面畫
主要用 hist() 來顯示,實現方式很簡單,把一組數據放入括弧里就行了,例如隨機生成一堆正態分布的數,然後直方圖顯示:
其中如果要設置直方圖格式(寬度、上下限、是否要輪廓)可以這樣:
註:
直方圖和折線圖這些不太一樣,折線圖是傳入兩個等長數據,然後每個x、y坐標一一對應展示出來。而直方圖是:第一個參數代表你傳入的所有數據,第二個參數代表你傳入的x軸范圍,然後直方圖會將第一個參數里傳入的數據一個個計算在某個范圍內含有的數據量,因此傳入的兩個參數數據不一定要等長,例如下面的例子:
結果如圖:
可以看出數據被自動分配到對應的范圍內上了
使用 subplot(row, col, area) :三個參數分別是行數、列數和區域,比如要將原圖分成2行2列(切成4份),然後要左下角那個圖就:
如果想4個圖都顯示就4個 subplot ,分別1、2、3、4就行了,然後在各圖的subplot之後寫的都是每個圖的內容,現在我們試試弄一個2行,第一行兩列的圖片(想像下滑鼠的樣子),而且分別是不同的內容:
註:
labels 、 sizes 、 colors 和 explode 的長度都要一樣
1.導入3D圖相關模塊:
2.將畫圖板加到3D模塊里,然後加入數據即可:
3D散點圖舉例:
通過 imread() 讀取,舉例:
https://blog.csdn.net/qq_34859482/article/details/80617391
B. Python繪圖之(1)Turtle庫詳解
Turtle庫是Python語言中一個很流行的繪制圖像的函數庫,想像一個小烏龜,在一個橫軸為x、縱軸為y的坐標系原點,(0,0)位置開始,它根據一組函數指令的控制,在這個平面坐標系中移動,從而在它爬行的路徑上繪制了圖形。
畫布就是turtle為我們展開用於繪圖區域,我們可以設置它的大小和初始位置。
設置畫布大小
turtle.screensize(canvwidth=None, canvheight=None, bg=None),參數分別為畫布的寬(單位像素), 高, 背景顏色。
如:turtle.screensize(800,600, "green")
turtle.screensize() #返回默認大小(400, 300)
turtle.setup(width=0.5, height=0.75, startx=None, starty=None),參數:width, height: 輸入寬和高為整數時, 表示像素; 為小數時, 表示占據電腦屏幕的比例,(startx, starty): 這一坐標表示矩形窗口左上角頂點的位置, 如果為空,則窗口位於屏幕中心。
如:turtle.setup(width=0.6,height=0.6)
turtle.setup(width=800,height=800, startx=100, starty=100)
2.1 畫筆的狀態
在畫布上,默認有一個坐標原點為畫布中心的坐標軸,坐標原點上有一隻面朝x軸正方向小烏龜。這里我們描述小烏龜時使用了兩個詞語:坐標原點(位置),面朝x軸正方向(方向), turtle繪圖中,就是使用位置方向描述小烏龜(畫筆)的狀態。
2.2 畫筆的屬性
畫筆(畫筆的屬性,顏色、畫線的寬度等)
1) turtle.pensize():設置畫筆的寬度;
2) turtle.pencolor():沒有參數傳入,返回當前畫筆顏色,傳入參數設置畫筆顏色,可以是字元串如"green", "red",也可以是RGB 3元組。
3) turtle.speed(speed):設置畫筆移動速度,畫筆繪制的速度范圍[0,10]整數,數字越大越快。
2.3 繪圖命令
操縱海龜繪圖有著許多的命令,這些命令可以劃分為3種:一種為運動命令,一種為畫筆控制命令,還有一種是全局控制命令。
(1) 畫筆運動命令
(2) 畫筆控制命令
(3) 全局控制命令
(4) 其他命令
3. 命令詳解
3.1 turtle.circle(radius, extent=None, steps=None)
描述:以給定半徑畫圓
參數:
radius(半徑):半徑為正(負),表示圓心在畫筆的左邊(右邊)畫圓;
extent(弧度) (optional);
steps (optional) (做半徑為radius的圓的內切正多邊形,多邊形邊數為steps)。
舉例:
circle(50) # 整圓;
circle(50,steps=3) # 三角形;
circle(120, 180) # 半圓
實例:
1、太陽花
2、五角星
3、時鍾程序
C. 用Python畫圖
今天開始琢磨用Python畫圖,沒使用之前是一臉懵的,我使用的開發環境是Pycharm,這個輸出的是一行行命令,這個圖畫在哪裡呢?
搜索之後發現,它會彈出一個對話框,然後就開始畫了,比如下圖
第一個常用的庫是Turtle,它是Python語言中一個很流行的繪制圖像的函數庫,這個詞的意思就是烏龜,你可以想像下一個小烏龜在一個x和y軸的平面坐標系裡,從原點開始根據指令控制,爬行出來就是繪制的圖形了。
它最常用的指令就是旋轉和移動,比如畫個圓,就是繞著圓心移動;再比如上圖這個怎麼畫呢,其實主要就兩個命令:
turtle.forward(200)
turtle.left(170)
第一個命令是移動200個單位並畫出來軌跡
第二個命令是畫筆順時針轉170度,注意此時並沒有移動,只是轉角度
然後呢? 循環重復就畫出來這個圖了
好玩吧。
有需要仔細研究的可以看下這篇文章 https://blog.csdn.net/zengxiantao1994/article/details/76588580 ,這個牛人最後用這個庫畫個移動的鍾表,太贊了。
Turtle雖好玩,但是我想要的是我給定數據,然後讓它畫圖,這里就找到另一個常用的畫圖的庫了。
Matplotlib是python最著名的繪圖庫,它提供了一整套和matlab相似的命令API,十分適合互動式地行制圖。其中,matplotlib的pyplot模塊一般是最常用的,可以方便用戶快速繪制二維圖表。
使用起來也挺簡單,
首先import matplotlib.pyplot as plt 導入畫圖的圖。
然後給定x和y,用這個命令plt.plot(x, y)就能畫圖了,接著用plt.show()就可以把圖形展示出來。
接著就是各種完善,比如加標題,設定x軸和y軸標簽,范圍,顏色,網格等等,在 https://blog.csdn.net/guoziqing506/article/details/78975150 這篇文章里介紹的很詳細。
現在互聯網的好處就是你需要什麼內容,基本上都能搜索出來,而且還是免費的。
我為什麼要研究這個呢?當然是為了用,比如我把比特幣的曲線自己畫出來可好?
假設現在有個數據csv文件,一列是日期,另一列是比特幣的價格,那用這個命令畫下:
這兩列數據讀到pandas中,日期為df['time']列,比特幣價格為df['ini'],那我只要使用如下命令
plt.plot(df['time'], df['ini'])
plt.show()
就能得到如下圖:
自己畫的是不是很香,哈哈!
然後呢,我在上篇文章 https://www.jianshu.com/p/d4013d8a73de 中介紹過求Ahr999指數,那可不可以也放到這張圖中呢?不就是加一條命令嘛
plt.plot(df['time'], df['Ahr999'])
圖形如下:
但是,Ahr999指數怎麼就一條線不動啊, 原來兩個Y軸不一致,顯示出來太怪了,需要用多Y軸,問題來了。
繼續谷歌一下,把第二個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指數,紅色
ax2.set_ylim([0, 50])# 設定第二個Y軸范圍
ax2.set_ylabel('ahr999')
plt.grid(color="k", linestyle=":")# 網格
fig.legend(loc="center")#圖例
plt.show()
跑起來看看效果,雖然丑了點,但終於跑通了。
這樣就可以把所有指數都繪制到一張圖中,等等,三個甚至多個Y軸怎麼加?這又是一個問題,留給愛思考愛學習的你。
有了自己的數據,建立自己的各個指數,然後再放到圖形界面中,同時針對異常情況再自動進行提醒,比如要抄底了,要賣出了,用程序做出自己的晴雨表。
D. Python作圖程序
實戰小程序:畫出y=x^3的散點圖
樣例代碼如下:
[python]view plain
#coding=utf-8
importpylabasy#引入pylab模塊
x=y.np.linspace(-10,10,100)#設置x橫坐標范圍和點數
y.plot(x,x*x*x,'or')#生成圖像
ax=y.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))
ax.set_yticks([-1000,-500,500,1000])
y.xlim(x.min(),x.max())#將橫坐標設置為x的最大值和最小值
y.show()#顯示圖像
[python]view plain
importpylabasy
[python]view plain
y.np.linspace(-10,10,100)
舉例:
[python]view plain
>>>np.linspace(2.0,3.0,num=5)
array([2.,2.25,2.5,2.75,3.])
[python]view plain
y.plot(x,x*x*x,'or')#生成圖像
'r'可設置顏色為紅色,基本上和matlab的操作很像。
[python]view plain
y.xlim(x.min(),x.max())