日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python编程从入门到实践 之 数据可视化部分总结和回顾(未完待续)

發(fā)布時間:2024/4/18 python 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python编程从入门到实践 之 数据可视化部分总结和回顾(未完待续) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

15.1生成數(shù)據(jù)

matplotlib:是一個數(shù)學(xué)繪圖庫,使用它可以制作簡單的圖標(biāo)。

pygal包:專注于生成適合在數(shù)字設(shè)備上顯示的圖標(biāo)。通過使用pygal,可以在與圖表交互時突出元素以及調(diào)整大小,還可以輕松調(diào)整整個圖表的尺寸。pygal我自己的理解是python graphics adapt library,即python圖形適配器。

這兩個部分安裝就不敘述了,書上有的。安裝后在解釋器中運(yùn)行:

import matplotlib

如果沒有任何出錯信息,說明安裝正確。

另外,要查看由matplotlib制作的各種圖表,請訪問:https://matplotlib.org/示例的畫廊。單擊畫廊中的圖表,就可以查看用于生成圖表的代碼。

15.2 繪制簡單的折線圖

#導(dǎo)入pyplot,并指定了別名plt,避免反復(fù)鍵入pyplot import matplotlib.pyplot as plt # squares = [1,4,9,16,25,36,49] plt.plot(squares) plt.show()

注意:我自己實(shí)踐,可以吧import matplot.pyplot 寫成如下形式

from matplotlib import pyplot

運(yùn)行后,得到如下圖像?

15.2.1修改標(biāo)簽文字和線條粗細(xì)

上圖中的圖標(biāo)標(biāo)簽太小,線條太細(xì),下面自己定制。

import matplotlib.pyplot as pltsquares = [1,4,9,16,25,36,49] #linewidth決定了plot畫的線條的粗細(xì) plt.plot(squares,linewidth=5)#設(shè)置圖標(biāo)標(biāo)題,并加上標(biāo)簽 plt.title("Squares Numbers",fontsize=24) plt.xlabel("Value:",fontsize=14) #加上x軸標(biāo)簽,字體14 plt.ylabel("Square of Value:",fontsize=14) #給y軸加上標(biāo)簽,字體14#設(shè)置刻度標(biāo)記的大小(也就是坐標(biāo)軸上數(shù)字標(biāo)記的大小) plt.tick_params(axis='both',labelsize=14) plt.show()


?

15.2.2矯正圖形

圖形繪制以后,我們發(fā)現(xiàn)沒有正確地繪制數(shù)據(jù):折線圖的終點(diǎn)指出6的平方為49,下面來修復(fù)這個問題。

當(dāng)你向plot提供一系列的數(shù)字時,它假設(shè)第一個數(shù)據(jù)點(diǎn)對應(yīng)的x坐標(biāo)紙為0,但我們的第一個點(diǎn)對應(yīng)的值x為1,為了改變這種默認(rèn)的行為,我們可以給plot()同時提供輸入值和輸出值:

...snip... inputvalues = [1,2,3,4,5,6,7] squares = [1,4,9,16,25,36,49] #linewidth決定了plot畫的線條的粗細(xì) plt.plot(inputvalues,squares,linewidth=5) #同時提供輸入值和輸出值 ...snip...

plt還可以指定更多的實(shí)際參數(shù)。后路將會學(xué)習(xí)到。

15.2.3

import matplotlib.pyplot as plt#繪制單個點(diǎn),傳給scatter一對x和y坐標(biāo)即可 plt.scatter(2,4,s=100) plt.show() ~

注:scatter可以畫單個點(diǎn),也可以畫一系列的點(diǎn),前者傳遞單個點(diǎn)的坐標(biāo),后者傳遞2列表。

練習(xí)15-1

#15-1(1)import matplotlib.pyplot as plt inputvalues = list(x for x in range(1,6)) values = list(x**3 for x in range(1,6)) plt.scatter(inputvalues,values,s=10) plt.show() ~ #15-1(2) import matplotlib.pyplot as plt inputvalues = list(x for x in range(1,5001)) values = list(x**3 for x in range(1,5001)) #使用顏色漸變模式 plt.scatter(inputvalues,values,c=values,cmap=plt.cm.Blues,s=10) plt.show()

知識點(diǎn)總結(jié)

一、plt下的plot 和 scatter畫圖

(仿照mysql語句語法格式,[]內(nèi)部分是可以省略的部分),有的時候[]代表一個列表,大家可以自己嘗試運(yùn)行代碼進(jìn)行鑒別

(1)導(dǎo)入庫下面的方法
?

import matplotlib.pyplot as plt

或者

from matplotlib import pyplot as plt

(2)畫圖函數(shù)

plt.plot(inputvalues,outputvalues,line_width=NUM)

? ?plt.scatter(xvalues,yvalues,s=SQUAREVALUES)表示畫散點(diǎn)圖,s代表每個點(diǎn)內(nèi)由多少個像素組成,

這里面有個edgecolor表示有沒有輪廓,默認(rèn)有輪廓,但是我試了下,指定edgecolor='none'后,效果完全一樣的。

形如參數(shù)c='red',表示指定顏色的參數(shù)。對plot和scatter都是適用的。c也可以用rgb顏色模式指定,

例如:c=(0,0,0.2),當(dāng)值越大,顏色越深,值越小,顏色越淡。

#下面plot函數(shù)內(nèi)的[]不是可省略的意思,是指的一個列表

(3)設(shè)置標(biāo)題,x軸,y軸標(biāo)簽,下面三個函數(shù)參數(shù)設(shè)置方法一致

plt.title("title_contents",fontsize=NUM)

plt.xlabel(...)

plt.ylabel(...)

(4)設(shè)置坐標(biāo)軸刻度大小的函數(shù)

plt.tick_params(axis='both',labelsize=NUM)

(5)指定x和y坐標(biāo)范圍(xmaximum和ymuximum分別是x和y坐標(biāo)的最大值)

plt.axis([0,xmaximum,0,ymaximum])? ??

plt.plot([xvalues_list],y_values,line_width=WIDTH_VALUE),line_width 表示線的寬度是多少像素

(7)顯示函數(shù)

plt.show()? 顯示畫的圖形并且結(jié)束程序

plt.savefig('PICTURE_NAME',bbox_inches='tight'),第一個參數(shù)表示圖像名稱,第二個參數(shù)表示裁剪多余的部分,tight表示緊身的,代表將裁剪多余的部分

注意:bbox_inches='tight'只是刪除圖形周圍的所有額外空白區(qū)域,它在渲染完成后并未實(shí)際重新排列圖形中的任何內(nèi)容。

(8)顏色映射

關(guān)于顏色映射,類似如下格式
plt.scatter(x_values,y_values,c=y_values,...)

c可以賦值為y_values或者直接賦值一個list(range(len(y_values))),也就是一個自然數(shù)列表。如果賦值為自然數(shù)列表,那么顏色變化速度慢,如果賦值的列表內(nèi)的數(shù)據(jù)變化速度快,那么顏色變化速度非常快。

(9)隱藏坐標(biāo)軸

plt.axes().get_xaxis().set_visible(False)

plt.axes().get_yaxis().set_visible(False)

(10)調(diào)整繪圖窗口大小,分辨率,背景色等:

plt.figure(figsize(x,y))

例如: plt.figure(figsize=(10,6)),表示繪圖窗口是10英寸 * 6英寸

plt.figure(figsize=(10,6),dpi=)

二、pygal生成可縮放的矢量圖形文件

如果打算在線方式生成圖表,那么pygal很有用,會根據(jù)觀看者的屏幕來調(diào)整圖片大小。在任何設(shè)備上顯示都很美觀。

? ? ? ?http://www.pygal.org/? ? ?然后進(jìn)入Documentation,單擊Chart types。每個示例都包括源代碼,這讓你知道這些圖表是如何生成的。

pygal知識點(diǎn):

一、相關(guān)知識點(diǎn)

1.定義一個Bar圖 ?? hist = pygal.Bar()

2.給圖形加標(biāo)題? hist.title = 'some title'

3.給圖形加x坐加標(biāo)記: hist.x_labels = ['','','','','']是一個列表,列表中的元素可以是str類型,不能是int類型

4.給x,y坐標(biāo)加標(biāo)題? hist.x_title? = '??? '? and hist.y_title = '???? '

5.加 標(biāo)簽 + 值 hist.add('label_of_value',y_values)?? y_values是一個列表

6.渲染到文件 hist.render_to_file('filename')?? filename必須是一個svg文件

from die import Die import pygaldie = Die() results = [] for roll_num in range(100):result = die.roll()results.append(result) print(results) frequencies = [] for value in range(1,die.num_sides + 1):frequency = results.count(value)frequencies.append(frequency) print(frequencies)# 對結(jié)果進(jìn)行可視化 hist = pygal.Bar() #繪制直方圖 hist.title = 'Results of rolling one D6 1000 times' hist.x_labels = ['1','2','3','4','5','6'] hist.x_title = 'Result' hist.y_title = 'Frequency of Result'hist.add('D6',frequencies) hist.render_to_file('die_visual.svg')

再來個2個骰子的程序:

from die import Die import pygaldie1 = Die() die2 = Die()#擲骰子多次,并把結(jié)果放在一個列表中 results = [] for roll_num in range(1000):result = die1.roll() + die2.roll()results.append(result)#分析結(jié)果 frequencies = [] max_result = die1.num_sides + die2.num_sides for value in range(2,max_result + 1):frequency = results.count(value)frequencies.append(frequency)hist = pygal.Bar() hist.title = 'Results of rolling two D6 dice 1000 times.' hist.x_labels = ['2','3','4','5','6','7','8','9','10','11','12'] hist.y_title = 'Frequency of Result'hist.add('D6 + D6',frequencies) hist.render_to_file('two_d6.svg') print(frequencies)

15.3隨機(jī)漫步

練習(xí)15-3

#文件walk.py import matplotlib.pyplot as plt from random_walk import RandomWalkwhile True:rw = RandomWalk(5000)rw.fill_walk()plt.figure(figsize=(10,6),dpi=100)num_points = list(range(rw.num_count))#plot 沒有edgecolor和像 scatter那樣的顏色映射,不能用s設(shè)置點(diǎn)的面積,需要用linewidth設(shè)置plt.plot(rw.x_values,rw.y_values,c='red',linewidth=1,)plt.scatter(0,0,s=100,c='red',edgecolor='none')plt.scatter(rw.x_values[-1],rw.y_values[-1],s=100,edgecolor='none')#plt.axes().get_xaxis().set_visible(False)#plt.axes().get_yaxis().set_visible(False)plt.show()info = input("Another walk?(y/n)")if info == 'n' or info == 'N':break #文件random_walk.pyfrom random import choice import matplotlib.pyplot as plt class RandomWalk():def __init__(self,num_count = 5000):self.x_values = [0]self.y_values = [0]self.num_count = num_countdef fill_walk(self):while len(self.x_values) < self.num_count: x_direction = choice([1,-1])x_step = choice([0,1,2,3,4])x_step = x_direction * x_stepy_direction = choice([1,-1])y_step = choice([0,1,2,3,4])y_step = y_step * y_directionif x_step == 0 and y_step == 0:continuex_value = x_step + self.x_values[-1]y_value = y_step + self.y_values[-1]self.x_values.append(x_value)self.y_values.append(y_value)

練習(xí)15-5

random_walk.py改成如下:

from random import choice import matplotlib.pyplot as plt class RandomWalk():def __init__(self,num_count = 5000):self.x_values = [0]self.y_values = [0]self.num_count = num_countdef fill_walk(self):while len(self.x_values) < self.num_count: x_step = self.get_step()y_step = self.get_step()if x_step == 0 and y_step == 0:continuex_value = x_step + self.x_values[-1]y_value = y_step + self.y_values[-1]self.x_values.append(x_value)self.y_values.append(y_value)def get_step(self):direction = choice([-1,1])distance = choice([0,1,2,3,4])step = direction * distancereturn step

總結(jié)

以上是生活随笔為你收集整理的python编程从入门到实践 之 数据可视化部分总结和回顾(未完待续)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。