1. 程式人生 > >Python 項目實踐二(生成數據)第一篇

Python 項目實踐二(生成數據)第一篇

通過 http 000]) ont 其中 打開 圖片 小數 input

上面那個小遊戲教程寫不下去了,以後再寫吧,今天學點新東西,了解的越多,發現python越強大啊!

數據可視化指的是通過可視化表示來探索數據,它與數據挖掘緊密相關,而數據挖掘指的是使用代碼來探索數據集的規律和關聯。數據集可以是用一行代碼就能表示的小型數字列表,也可以是數以吉字節的數據。

最流行的工具之一是matplotlib,它是一個數學繪圖庫,我們將使用它來制作簡單的圖表,如折線圖和散點圖。然後,我們將基於隨機漫步概念生成一個更有趣的數據集——根據一系列隨機決策生成的圖表。我們還將使用Pygal包,它專註於生成適合在數字設備上顯示的圖表。通過使用Pygal,可在用戶與圖表交互時突出元素以及調整其大小,還可輕松地調整整個圖表的尺寸,使其適合在微型智能手表或巨型顯示器上顯示。我們將使用Pygal以各種方式探索擲骰子的結果。

一 折線圖

1 繪制簡單的折線圖

下面來使用matplotlib繪制一個簡單的折線圖,再對其進行定制,以實現信息更豐富的數據可視化。我們將使用平方數序列1、4、9、16和25來繪制這個圖表。

import matplotlib.pyplot as plt
squares = [1, 4, 9, 16, 25]
plt.plot(squares)
plt.show()

運行結果如下圖:

技術分享圖片

plt.show()打開matplotlib查看器,並顯示繪制的圖形,

2 修改標簽文字和線條粗細

import matplotlib.pyplot as plt

squares=[1,4,9,16,25]
plt.plot(squares,linewidth=5)

#設置圖標標題,並給坐標軸加上標簽
plt.title("Square Numbers",fontsize=24)
plt.xlabel("value",fontsize=14)
plt.ylabel("Square of value",fontsize=14)

#設置刻度標記的大小
plt.tick_params(axis="both",labelsize=14)
plt.show()

代碼註釋的很詳細了,這裏再強調幾點:

(1)參數linewidth決定了plot()繪制的線條的粗細。函數title()給圖表指定標題

(2)函數xlabel()和ylabel()讓你能夠為每條軸設置標題

(3)在上述代碼中,出現了多次的參數fontsize指定了圖表中文字的大小。

(4)函數tick_params()設置刻度的樣式

運行結果如下圖:

技術分享圖片

3 校正圖像

圖形更容易閱讀後,我們發現沒有正確地繪制數據:折線圖的終點指出4.0的平方為25!下面修復這個問題。

當你向plot()提供一系列數字時,它假設第一個數據點對應的x坐標值為0,但我們的第一個點對應的x值為1。為改變這種默認行為,我們可以給plot()同時提供輸入值和輸出值:

import matplotlib.pyplot as plt

input_values=[1,2,3,4,5]
squares=[1,4,9,16,25]
plt.plot(input_values,squares,linewidth=5)

#設置圖標標題,並給坐標軸加上標簽
plt.title("Square Numbers",fontsize=24)
plt.xlabel("value",fontsize=14)
plt.ylabel("Square of value",fontsize=14)

#設置刻度標記的大小
plt.tick_params(axis="both",labelsize=14)
plt.show()

結果如下:

技術分享圖片

二 散點圖

1 使用scatter()繪制散點圖並設置其樣式

要繪制單個點,可使用函數scatter(),並向它傳遞一對x和y坐標,它將在指定位置繪制一個點:

import matplotlib.pyplot as plt

plt.scatter(2,4)
plt.show()

技術分享圖片

下面來設置輸出的樣式,使其更有趣:添加標題,給軸加上標簽,並確保所有文本都大到能夠看清:

import matplotlib.pyplot as plt

plt.scatter(2,4,s=400)
# 設置圖表標題並給坐標軸加上標簽
plt.title("Square Numbers", fontsize=24)
plt.xlabel("Value", fontsize=14)
plt.ylabel("Square of Value", fontsize=14)
# 設置刻度標記的大小
plt.tick_params(axis=‘both‘, which=‘major‘, labelsize=14)
plt.show()

技術分享圖片

2 使用scatter()繪制一系列的點

要繪制一系列的點,可向scatter()傳遞兩個分別包含x值和y值的列表,如下所示:

import matplotlib.pyplot as plt
x_values=[1,2,3,4,5]
y_values=[1,4,9,16,25]

plt.scatter(x_values,y_values,s=400)
# 設置圖表標題並給坐標軸加上標簽
plt.title("Square Numbers", fontsize=24)
plt.xlabel("Value", fontsize=14)
plt.ylabel("Square of Value", fontsize=14)
# 設置刻度標記的大小
plt.tick_params(axis=‘both‘, which=‘major‘, labelsize=14)
plt.show()

列表x_values包含要計算其平方值的數字,而列表y_values包含前述每個數字的平方值。將這些列表傳遞給scatter()時,matplotlib依次從每個列表中讀取一個值來繪制一個點。要繪制的點的坐標分別為 (1, 1)、(2, 4)、(3, 9)、(4, 16)和(5, 25),最終的結果如圖:

技術分享圖片

三 自動計算數據

手工計算列表要包含的值可能效率低下,需要繪制的點很多時尤其如此。可以不必手工計算包含點坐標的列表,而讓Python循環來替我們完成這種計算。下面是繪制1000個點的代碼:

import matplotlib.pyplot as plt

x_values = list(range(1,1001))
y_values = [x**2 for x in x_values]
plt.scatter(x_values,y_values,s=40)

# 設置圖表標題並給坐標軸加上標簽
plt.title("Square Numbers", fontsize=24)
plt.xlabel("Value", fontsize=14)
plt.ylabel("Square of Value", fontsize=14)
# 設置刻度標記的大小
plt.tick_params(axis=‘both‘, which=‘major‘, labelsize=14)

#設置每個坐標的取值範圍
plt.axis([0,1100,0,1100000])
plt.show()

由於這個數據集較大,我們將點設置得較小,並使用函數axis()指定了每個坐標軸的取值範圍。函數axis()要求提供四個值:x和y坐標軸的最小值和最大值,結果如下圖:

技術分享圖片

四 刪除數據點的輪廓

matplotlib允許你給散點圖中的各個點指定顏色。默認為藍色點和黑色輪廓,在散點圖包含的數據點不多時效果很好。但繪制很多點時,黑色輪廓可能會粘連在一起。要刪除數據點的輪廓可在調用scatter()時傳遞實參edgecolor=‘none‘:

plt.scatter(x_values, y_values, edgecolor=‘none‘, s=40)將相應調用修改為上述代碼後,如果再運行scatter_squares.py,在圖表中看到的將是藍色實心點。

技術分享圖片

五 自定義顏色

要修改數據點的顏色,可向scatter()傳遞參數c,並將其設置為要使用的顏色的名稱,如下

plt.scatter(x_values, y_values, c=‘red‘, edgecolor=‘none‘, s=40)

你還可以使用RGB顏色模式自定義顏色。要指定自定義顏色,可傳遞參數c,並將其設置為一個元組,其中包含三個0~1之間的小數值,它們分別表示紅色、綠色和藍色分量。例如,下面的代碼行創建一個由淡藍色點組成的散點圖:

plt.scatter(x_values, y_values, c=(0, 0, 0.8), edgecolor=‘none‘, s=40)

值越接近0,指定的顏色越深,值越接近1,指定的顏色越淺。

技術分享圖片

六 使用顏色映射

顏色映射(colormap)是一系列顏色,它們從起始顏色漸變到結束顏色。在可視化中,顏色映射用於突出數據的規律,例如,你可能用較淺的顏色來顯示較小的值,並使用較深的顏色來顯示較大的值。

模塊pyplot內置了一組顏色映射。要使用這些顏色映射,你需要告訴pyplot該如何設置數據集中每個點的顏色。下面演示了如何根據每個點的y值來設置其顏色:

plt.scatter(x_values, y_values, c=y_values, cmap=plt.cm.Blues,edgecolor="none",s=40)

我們將參數c設置成了一個y值列表,並使用參數cmap告訴pyplot使用哪個顏色映射。這些代碼將y值較小的點顯示為淺藍色,並將y值較大的點顯示為深藍色,生成的圖形如圖。

技術分享圖片

七 自動保存圖片

要讓程序自動將圖表保存到文件中,可將對plt.show()的調用替換為對plt.savefig()的調用:

plt.savefig(‘squares_plot.png‘, bbox_inches=‘tight‘)

第一個實參指定要以什麽樣的文件名保存圖表,這個文件將存儲到scatter_squares.py所在的目錄中;第二個實參指定將圖表多余的空白區域裁剪掉。如果要保留圖表周圍多余的空白區域,可省略這個實參。

Python 項目實踐二(生成數據)第一篇