簡單介紹python中的繪圖
千山網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),千山網(wǎng)站設(shè)計制作,有大型網(wǎng)站制作公司豐富經(jīng)驗。已為千山成百上千家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站制作要多少錢,請找那個售后服務(wù)好的千山做網(wǎng)站的公司定做!
繪制簡單的折線圖
散點圖
設(shè)置每個坐標軸的取值范圍
將主點顏色改成白,邊緣顏色為紅
自動保存圖表
隨機漫步
隨機漫步漸變色
小知識點
繪制起點和終點
畫布尺寸
隱藏坐標軸
pygal
roll one dice
繪制簡單的折線圖
首先下載matplotlib安裝程序
import matplotlib.pyplot as plt
x_values = [1, 2, 3, 4, 5, 6] # 代表x軸的值
y_values = [1, 2, 4, 8, 16, 32] # 代表與x相對應(yīng)的y軸的值
# plt.plot(y_values, linewidth=3)
plt.plot(x_values, y_values, linewidth=3)
# 設(shè)置圖表標題,并改變橫縱坐標的名稱
plt.title("figure test", fontsize=24)
plt.xlabel("xValue", fontsize=14)
plt.ylabel("yValue", fontsize=14)
# 更改刻度標記的大小
plt.tick_params(axis='both', labelsize=12)
plt.show() # 打開matplotlib查看器,顯示繪制的圖形
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
?
散點圖
import matplotlib.pyplot as plt
# 繪制單個x = 2, y = 4坐標軸上的點
# plt.scatter(2, 4, s=100) # s用來更改單個點的大小
# 繪制一群點
x_values = [1, 2, 3, 4, 5]
y_values = [1, 2, 4, 8, 16]
plt.scatter(x_values, y_values, s=100)
# 設(shè)置圖表標題,并改變橫縱坐標的名稱
plt.title("figure test", fontsize=24)
plt.xlabel("xValue", fontsize=14)
plt.ylabel("yValue", fontsize=14)
# 更改刻度標記的大小
plt.tick_params(axis='both', which = 'major', labelsize=12)
plt.show()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
?
另一種方法繪制此圖:(自動生成數(shù)據(jù))
import matplotlib.pyplot as plt
# 繪制單個x = 2, y = 4坐標軸上的點
# plt.scatter(2, 4, s=100) # s用來更改單個點的大小
# 繪制一群點
i = 1
x_values = list(range(1, 6))
y_values = [2**(i-1) for i in x_values]
plt.scatter(x_values, y_values, s=100)
# 設(shè)置圖表標題,并改變橫縱坐標的名稱
plt.title("figure test", fontsize=24)
plt.xlabel("xValue", fontsize=14)
plt.ylabel("yValue", fontsize=14)
# 更改刻度標記的大小
plt.tick_params(axis='both', which='major', labelsize=12)
plt.show()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
設(shè)置每個坐標軸的取值范圍
plt.axis([0, 100, 0, 1000])
1
1
前面對應(yīng)x, 后面對應(yīng)y
?
將主點顏色改成白,邊緣顏色為紅
plt.scatter(x_values, y_values, c='white', edgecolor='red', s=20)
plt.scatter(x_values, y_values, c=(1, 1, 1), edgecolor='red', s=20)
1
2
1
2
c for color; 含三個0~1之間的小數(shù)值
顏色映射(colormap)
plt.scatter(x_values, y_values, c=y_values, cmap=plt.cm.Reds,
edgecolor='none', s=40)
1
2
1
2
要了解pyplot中所有的顏色映射:
自動保存圖表
plt.savefig(‘Figure1.png’, bbox_inches=‘tight’)
第一個參數(shù)表示名字, 將其以Figure1.png存儲在example.py同一個文件夾里
第二個參數(shù)表示將圖表多余的空白區(qū)域裁剪掉
隨機漫步
隨機游走(random walk)也稱隨機漫步,隨機行走等是指基于過去的表現(xiàn),無法預(yù)測將來的發(fā)展步驟和方向。核心概念是指任何無規(guī)則行走者所帶的守恒量都各自對應(yīng)著一個擴散運輸定律 ,接近于布朗運動,是布朗運動理想的數(shù)學(xué)狀態(tài),現(xiàn)階段主要應(yīng)用于互聯(lián)網(wǎng)鏈接分析及金融股票市場中。(來自百度百科)
import matplotlib.pyplot as plt
from random import choice
class RandomWalk:
def __init__(self, num_points=5000):
self.num_points = num_points
# 從(0, 0)開始出發(fā)
self.x_values = [0]
self.y_values = [0]
def start_walk(self):
while len(self.x_values) self.num_points:
x_direction = choice([-1, 1])
x_distance = choice([0, 1, 2])
x_walk = x_direction * x_distance
y_direction = choice([1, -1])
y_distance = choice([0, 10, 20])
y_walk = y_direction * y_distance
# 拒絕原地不動
if x_walk == 0 and y_walk == 0:
continue
# 計算下一個點的x和y值
next_x = self.x_values[-1] + x_walk # 從x_values的倒數(shù)第一個開始加上x方向走的距離
next_y = self.y_values[-1] + y_walk # 從y_values的倒數(shù)第一個開始加上y方向走的距離
self.x_values.append(next_x)
self.y_values.append(next_y)
randomwalk = RandomWalk()
randomwalk.start_walk()
plt.scatter(randomwalk.x_values, randomwalk.y_values, s=5)
plt.show()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
?
隨機漫步漸變色
randomwalk = RandomWalk()
randomwalk.start_walk()
point_numbers = list(range(randomwalk.num_points))
plt.scatter(randomwalk.x_values, randomwalk.y_values, c=point_numbers, cmap=plt.cm.Reds, edgecolor='none', s=5)
plt.show()
1
2
3
4
5
6
7
1
2
3
4
5
6
7
?
小知識點
繪制起點和終點
randomwalk = RandomWalk()
randomwalk.start_walk()
point_numbers = list(range(randomwalk.num_points))
plt.scatter(randomwalk.x_values, randomwalk.y_values, c=point_numbers, cmap=plt.cm.Reds, edgecolor='none', s=5)
# 繪制起點和終點
plt.scatter(0, 0, c='green', edgecolors='none', s=100)
plt.scatter(randomwalk.x_values[-1], randomwalk.y_values[-1], c='red', edgecolors='none', s=100)
plt.show()
1
2
3
4
5
6
7
8
9
10
11
1
2
3
4
5
6
7
8
9
10
11
?
畫布尺寸
plt.figure(dpi=128, figsize=(10, 6))
單位為英寸;函數(shù)figure()用于指定圖表的寬度、高度、分辨率和背景色。
dpi: 傳遞分辨率
隱藏坐標軸
plt.axes().get_xaxis().set_visible(False)
plt.axes().get_yaxis().set_visible(False)
pygal
roll one dice
from random import randint
import pygal
class Die:
def __init__(self, num_sides=6):
self.num_sides = num_sides
def roll(self):
return randint(1, self.num_sides)
die = Die()
results = []
# 擲100次骰子
for roll_num in range(100):
result = die.roll()
results.append(result)
frequencies = []
for value in range(1, die.num_sides + 1):
frequency = results.count(value)
frequencies.append(frequency)
horizontal_bar_chart = pygal.Bar()
horizontal_bar_chart.title = "randomly roll a 6-side die"
horizontal_bar_chart.x_labels = ['1', '2', '3', '4', '5', '6']
horizontal_bar_chart.x_title = "Result"
horizontal_bar_chart.y_title = "Frequency"
horizontal_bar_chart.add('6side', frequencies)
horizontal_bar_chart.render_to_file('die_visual.svg')
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
作者:邁克爾·貝耶勒(Michael Beyeler)
如需轉(zhuǎn)載請聯(lián)系華章 科技
如果已安裝Anaconda Python版本,就已經(jīng)安裝好了可以使用的 Matplotlib。否則,可能要訪問官網(wǎng)并從中獲取安裝說明:
正如使用np作為 NumPy 的縮寫,我們將使用一些標準的縮寫來表示 Matplotlib 的引入:
在本書中,plt接口會被頻繁使用。
讓我們創(chuàng)建第一個繪圖。
假設(shè)想要畫出正弦函數(shù)sin(x)的線性圖。得到函數(shù)在x坐標軸上0≤x<10內(nèi)所有點的值。我們將使用 NumPy 中的 linspace 函數(shù)來在x坐標軸上創(chuàng)建一個從0到10的線性空間,以及100個采樣點:
可以使用 NumPy 中的sin函數(shù)得到所有x點的值,并通過調(diào)用plt中的plot函數(shù)把結(jié)果畫出來:
你親自嘗試了嗎?發(fā)生了什么嗎?有沒有什么東西出現(xiàn)?
實際情況是,取決于你在哪里運行腳本,可能無法看到任何東西。有下面幾種可能性:
1. 從.py腳本中繪圖
如果從一個腳本中運行 Matplotlib,需要加上下面的這行調(diào)用:
在腳本末尾調(diào)用這個函數(shù),你的繪圖就會出現(xiàn)!
2. 從 IPython shell 中繪圖
這實際上是交互式地執(zhí)行Matplotlib最方便的方式。為了讓繪圖出現(xiàn),需要在啟動 IPython 后使用所謂的%matplotlib魔法命令。
接下來,無須每次調(diào)用plt.show()函數(shù),所有的繪圖將會自動出現(xiàn)。
3. 從 Jupyter Notebook 中繪圖
如果你是從基于瀏覽器的 Jupyter Notebook 中看這段代碼,需要使用同樣的%matplotlib魔法命令。然而,也可以直接在notebook中嵌入圖形,這會有兩種輸出選項:
在本書中,將會使用inline選項:
現(xiàn)在再次嘗試一下:
上面的命令會得到下面的繪圖輸出結(jié)果:
如果想要把繪圖保存下來留作以后使用,可以直接在 IPython 或者 Jupyter Notebook 使用下面的命令保存:
僅需要確保你使用了支持的文件后綴,比如.jpg、.png、.tif、.svg、.eps或者.pdf。
作為本章最后一個測試,讓我們對外部數(shù)據(jù)集進行可視化,比如scikit-learn中的數(shù)字數(shù)據(jù)集。
為此,需要三個可視化工具:
那么開始引入這些包吧:
第一步是載入實際數(shù)據(jù):
如果沒記錯的話,digits應(yīng)該有兩個不同的數(shù)據(jù)域:data域包含了真正的圖像數(shù)據(jù),target域包含了圖像的標簽。相對于相信我們的記憶,我們還是應(yīng)該對digits稍加 探索 。輸入它的名字,添加一個點號,然后按Tab鍵:digits.TAB,這個操作將向我們展示digits也包含了一些其他的域,比如一個名為images的域。images和data這兩個域,似乎簡單從形狀上就可以區(qū)分。
兩種情況中,第一維對應(yīng)的都是數(shù)據(jù)集中的圖像數(shù)量。然而,data中所有像素都在一個大的向量中排列,而images保留了各個圖像8×8的空間排列。
因此,如果想要繪制出一副單獨的圖像,使用images將更加合適。首先,使用NumPy的數(shù)組切片從數(shù)據(jù)集中獲取一幅圖像:
這里是從1797個元素的數(shù)組中獲取了它的第一行數(shù)據(jù),這行數(shù)據(jù)對應(yīng)的是8×8=64個像素。下面就可以使用plt中的imshow函數(shù)來繪制這幅圖像:
上面的命令得到下面的輸出:
此外,這里也使用cmap參數(shù)指定了一個顏色映射。默認情況下,Matplotlib 使用MATLAB默認的顏色映射jet。然而,在灰度圖像的情況下,gray顏色映射更有效。
最后,可以使用plt的subplot函數(shù)繪制全部數(shù)字的樣例。subplot函數(shù)與MATLAB中的函數(shù)一樣,需要指定行數(shù)、列數(shù)以及當(dāng)前的子繪圖索引(從1開始計算)。我們將使用for 循環(huán)在數(shù)據(jù)集中迭代出前十張圖像,每張圖像都分配到一個單獨的子繪圖中。
這會得到下面的輸出結(jié)果:
關(guān)于作者:Michael Beyeler,華盛頓大學(xué)神經(jīng)工程和數(shù)據(jù)科學(xué)專業(yè)的博士后,主攻仿生視覺計算模型,用以為盲人植入人工視網(wǎng)膜(仿生眼睛),改善盲人的視覺體驗。 他的工作屬于神經(jīng)科學(xué)、計算機工程、計算機視覺和機器學(xué)習(xí)的交叉領(lǐng)域。同時他也是多個開源項目的積極貢獻者。
本文摘編自《機器學(xué)習(xí):使用OpenCV和Python進行智能圖像處理》,經(jīng)出版方授權(quán)發(fā)布。
1、返回原點
home()
無參數(shù),直接調(diào)用
2、畫圓
circle(radius,extent,steps)
參數(shù):radius 指定圓的半徑,extent 繪制圓弧的夾角,steps 多邊形變數(shù)不給默認值
3、畫點
dot(size,color)
參數(shù):size繪制點的直徑值,color點的色彩
4、印章
stamp()
無參數(shù)
5、清除印章
clearstamp(stampid)清楚印章
clearstamps(n=None) 清楚多個印章
參數(shù):stampid是調(diào)用stamp函數(shù)返回的ID值,n為None則刪除全部印章,如果n0則刪除前n個印章,n
接受自己的普通,然后全力以赴的出眾,告訴自己要努力,但不要著急....
當(dāng)然, 這個結(jié)果并不是我真正想要的,Pass, 太丑了!
好吧,安排,我們先看下實現(xiàn)后的效果!
這個效果自然就比之前的好多了!
實現(xiàn)python散點圖繪制需要用到matplotlib庫, matplotlib庫是專門用于可視化繪圖的工具庫;學(xué)習(xí)一個新的庫當(dāng)然看官方文檔了:
實現(xiàn)思路:
matplotlib.pyplot.scatter() 函數(shù)是專門繪制散點圖的函數(shù):
matplotlib.pyplot.scatter ( x, y , s=None , c=None , marker=None , cmap=None , norm=None , vmin=None , vmax=None , alpha=None , linewidths=None , verts=None , edgecolors=None , ***, data=None , ** kwargs ) **
plt.scatter(observation, estimate, c=Z1, cmap=colormap, marker=".", s=marker_size, norm=colors.LogNorm(vmin=Z1.min(), vmax=0.5 * Z1.max()))
其中:
1、c參數(shù)為計算的散點密度;
2、cmap為色帶(matplotlib里面自帶了很多色帶可供選擇),參見:
3、由于計算的散點密度數(shù)值大小分散,因此利用norm參數(shù)對散點密度Z1進行歸一化處理(歸一化方式很多,參見colors類),并給歸一化方式設(shè)置色帶刻度的最大最小值vmin和vmax(一般這兩個參數(shù)就是指定散點密度的最小值和最大值),這樣就建立起了密度與色帶的映射關(guān)系。
(這里的結(jié)果與前面展示的相比改變了計算散點密度的半徑:radius = 3以及繪制散點圖的散點大小marksize)
作者能力水平有限,歡迎各位批評指正!