一篇文章让你学会绘画十一种常见数据分析图(折线图,直方图,散点图,雷达图等等)
本篇博文主要內容ython Pyplot中的十一個常用繪圖,包括參數說明,代碼,運行結果。
有問題可以+Q180096010一起交流學習~
目錄
?1. 折線圖
plt.plot繪制折線圖代碼展示:
2. 散點圖
scatter繪圖示例1:
3. 直方圖?
bar繪圖示例1:
bar繪圖示例2:
4. 餅圖
pie繪圖示例:
5. 箱線圖?
boxplot繪圖示例:
6.概率圖?
繪制概率圖:
7.雷達圖?
繪制某學生成績信息的雷達圖
8.流向圖?
流向圖繪制
9.繪圖中的表格設置?
在繪圖中顯示數據表格
10. 極坐標圖?
繪制極坐標圖
11. 詞云圖?
11.1 安裝相關的包
11.2 詞云生成過程
?11.3 詞云生成示例:
結尾:
?1. 折線圖
折線圖(Line Chart)是一種將數據點按照順序連接起來的圖形,也可以看作是將散點圖按照X軸坐標順序鏈接起來的圖形。折線圖的主要功能是查看因變量y隨著自變量x改變的趨勢,最適合用于顯示隨時間(根據常用比例設置)而改變的連續數據。同時,還可以看出數量的差異
繪制折線圖plot的格式:
?
plot函數在官方文檔的語法中只要求填入不定長參數,實際可以填入的主要參數及其說明見下表1
表1 plot主要參數及其說明
參數 說明 x,y 接收array,表示X軸和Y軸對應的數據,無默認 color 接收特定string,指定線條的顏色,默認為None linestyle 接收特定string,指定線條的類型,默認為“-” marker 接收特定的string,表示繪制的點的類型,默認為None alpha接收0~1的小數,表示點的透明度,默認為None
?
color參數的8種常用的縮寫見表2
| 顏色縮寫 | 代表的顏色 |
| b | 藍色 |
| g | 綠色 |
| r | 紅色 |
| c | 青色 |
| m | 品紅 |
| y | 黃色 |
| k | 黑色 |
| w | 白色 |
?
plt.plot繪制折線圖代碼展示:
?
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline
x = np.arange(9)
y = np.sin(x)
z = np.cos(x)
#marker數據點樣式,linewidth線寬,linestyle線型樣式,color顏色
plt.plot(x,y,marker='*',linewidth=1,linestyle='--',color='orange')
plt.plot(x,z)
plt.title('matplotlib AK')
plt.xlabel('height',fontsize=15)
plt.ylabel('width',fontsize=15)
#設置圖例
plt.legend(['Y','Z'],loc='upper right')
plt.grid(True)
plt.show() ?
2. 散點圖
? ? ? ? 散點圖(Scatter Diagram)又稱為散點分布圖,是以一個特征為橫坐標,另一個特征為縱坐標,使用坐標點(散點)的分布形態反映特征間統計關系的一種圖形。值時由點在圖表中的位置表示,類別是由圖表中的不同標記表示 ,通常用于比較跨類別的數據
? ? ? ? scatter方法的格式:
? ? ? ? matplotlib.pyplot.scatter(x,y,s=None,c=None,marker=None,alpha=None)? ? ? ? scatter函數主要參數及其說明見表3
?
| 參數 | 說明 |
| x,y | 接收array,表示X軸和Y軸對應的數據,無默認 |
| s | 接收數值或一維的array,指定點的大小,若傳入一維array則表示每個點的大小,默認為None |
| c | 接收顏色或一維的array,指定點的顏色,若傳入一維array則表示每個點的顏色,默認為None |
| marker | 接收特定的string,表示繪制的點的類型,默認為None |
| alpha | 接收0~1的小數,表示點的透明度,默認為None |
?
scatter繪圖示例1:
fig.ax = plt.subplots() plt.rcParams['font.family'] = ['SimHei'] #用來顯示中文標簽 plt.rcParams['axes.unicode_minus'] = False #用來正常顯示符號 x1 = np.arange(1,30) y1 = np.sin(x1) ax1 = plt.subplot(1,1,1) plt.title('散點圖 AK') plt.xlabel('X') plt.ylabel('Y') lvalue = x1 ax1.scatter(x1,y1,c='r',s=100,linewidths=lvalue,marker='o') plt.legend('x1') plt.show()?scatter繪圖示例2:
fig,ax = plt.subplots() plt.rcParams['font.family'] = ['SimHei'] #用來顯示中文標簽 plt.rcParams['axes.unicode_minus'] = False #用來正常顯示符號 for color in ['red','green','blue']:n = 500x,y = np.random.randn(2,n)ax.scatter(x,y,c=color,label=color,alpha=0.3,edgecolor='none') ax.legend() ax.grid(True) plt.show()??
3. 直方圖?
? ? ? ? 直方圖(Histogram)又稱質量分布圖,是統計報告圖的一種,由一系列高度不等的縱向條紋或線段表示數據分布的情況,一般用橫軸表示數據所屬類別,縱軸表示數量或者占比。用直方圖可以比較直觀地看出產品質量特性的分布狀態,便于判斷其總體質量分布情況。直方圖可以發現分布表無法發現的數據模式、樣本的頻率分布和總體的分布。
繪制直方圖函數bar格式:
函數bar的常用參數及其說明見下表4
| 參數 | 說明 |
| left | 接收array,表示X軸數據,無默認 |
| height | 接收array,表示X軸所代表數據的數量,無默認 |
| width | 接收0~1的float,指定直方圖寬度,默認為0.8 |
| color | 接收特定string或者包含顏色字符串的array,表示直方圖顏色,默認為None |
?
bar繪圖示例1:
import pandas as pd import matplotlib.pyplot as plt import numpy as np fig,axes = plt.subplots(2,1) data = pd.Series(np.random.randn(16),index=list('abcdefghijklmnop')) data.plot.bar(ax = axes[0],color='k',alpha=0.7) data.plot.barh(ax = axes[1],color='k',alpha=0.7)bar繪圖示例2:
import pandas as pd import matplotlib.pyplot as plt import numpy as np plt.rcParams['font.family'] = ['SimHei'] #用來顯示中文標簽 plt.rcParams['axes.unicode_minus'] = False #用來正常顯示符號 fig,ax = plt.subplots() x = np.arange(1,6) y1 = np.random.uniform(1.5,1.0,5) y2 = np.random.uniform(1.5,1.0,5) plt.bar(x,y1,width = 0.35,facecolor='lightskyblue',edgecolor = 'white') plt.bar(x+0.35,y2,width = 0.35,facecolor='yellowgreen',edgecolor = 'white') plt.show()4. 餅圖
? ? ? ? 餅圖(Pie Graph)用于表示不同分類的占比情況,通過弧度大小來對比各種分類,餅圖可以比較清楚的反映出部分與部分、部分與整體之間的比例關系,易于顯示每組數據相對于總數的大小,而且顯現的方式直觀。
? ? ? ? 繪制餅圖pie方法的格式:
matplotlib.pyplot.pie(x,explode = None,labels = None,color = None,autopct = None, pctdistance = 0.6,shadow=false,labeldistance=1.1,startangle=None,radius=None,...)pie函數常用參數及其說明見表5
?
| 參數 | 說明 |
| x | 接收array,表示用于繪制餅圖的數據,無默認 |
| explode | 接收array,指定項離餅圖圓心為n個半徑,默認為None |
| labels | 接收array,指定每一項的名稱,默認為None |
| color | 接收特定的string或包含顏色字符串的array,表示顏色,默認為None |
| autopct | 接收特定的string,指定數值的顯示方式,默認為None |
| pctdistance | float型,指定每一項的比例和距離餅圖圓心n個半徑,默認為0.6 |
| labeldistance | float型,指定每一項的名稱和距離餅圖圓心的半徑數,默認為1.1 |
| radius | float型,表示餅圖的半徑,默認為1 |
?
pie繪圖示例:
plt.figure(figsize=(6,6)) #建立軸的大小 labels = ['Springs','Summer','Autumn','Winter'] x = [15,30,45,10] explode = (0.05,0.05,0.05,0.05) #這個是控制分離的距離的,默認餅圖不分離 plt.pie(x,labels = labels,explode = explode,startangle = 60,autopct='%1.1f%%') #autopct在圖中顯示比例值,注意值的格式 plt.title('Rany days by season') plt.show()5. 箱線圖?
? ? ? ? 箱線圖(Boxplot)也稱盒須圖,通過繪制反映數據分布特征的統計量,提供有關數據位置和分散情況的關鍵信息,尤其在比較不同特征時,更可表現其分散程度差異。箱線圖使用數據中的5個統計量(最小值,下四分位數,中位數,上四分位數和最大值)來描述數據,它可以粗略地看出數據是否具有對稱性,分布的分散程度等信息,特別可以用于對幾個樣本的比較,還可以粗略檢測異常值。
? ? ? ? boxplot函數的格式:
matplotlib.pyplot.boxplot(x,notch = None,sym = None,vert = None,whis = None, positions = None,width = None,patch_artist = None, meanline = None,labels = None,...)boxplot函數常用參數及其說明見表6:
| 參數 | 說明 |
| x | 接收array,表示用于繪制箱線圖的數據,無默認 |
| notch | 接收boolean,表示中間箱體是否有缺口,默認為None |
| sym | 接收特定的string,指定異常點形狀,默認為None |
| vert | 接收boolean,表示圖形是縱向的或者橫向,默認為None |
| positions | 接收array,表示圖形位置,默認為None |
| width | 接收scalar或者array,表示每個箱體的寬度,默認為None |
| labels | 接收array,指定每一個箱線圖的標簽,默認為None |
| meanline | 接收boolean,表示是否顯示均值線,默認為False |
boxplot繪圖示例:
import numpy as np import pandas as pd import matplotlib.pyplot as plt np.random.seed(2)#設置隨機種子 df = pd.DataFrame(np.random.rand(5,4),columns = ['A','B','C','D']) #生成0~1的5*4維度數據并存入4列DataFrame中 df.boxplot() plt.show()?
6.概率圖?
????????概率圖模型時圖靈獲得者Pearl提出的用來表示變量間概率依賴關系的理論,正態分布又名高斯分布。正太概率密度函數normpdf(X,mu,sigma),其中,X為向量,mu為均值,sigma為標準差。
繪制概率圖:
import numpy as np import pandas as pd import matplotlib.pyplot as plt from scipy.stats import norm fig,ax = plt.subplots() plt.rcParams['font.family'] = ['SimHei'] #用來顯示中文標簽 plt.rcParams['axes.unicode_minus'] = False #用來正常顯示符號 np.random.seed(1587554) mu = 100 sigma = 15 x = mu+sigma*np.random.randn(437) num_bins = 50 n,bins,patches = ax.hist(x,num_bins,density=1,stacked=True) y = norm.pdf(bins,mu,sigma) ax.plot(bins,y,'--') fig.tight_layout() plt.show()7.雷達圖?
? ? ? ? 雷達圖也稱網絡圖、星圖、蜘蛛網圖、不規則多邊形、極坐標圖等。雷達圖是以從同一點開始的軸上表示的三個或更多個定量變量的二維圖表的形式顯示多變量數據的圖形方法。軸的相對位置和角度通常是無信息的。雷達圖相當于平行坐標圖,軸徑向排列。
繪制某學生成績信息的雷達圖
import matplotlib.pyplot as plt import numpy as np %matplotlib inline #某學生的課程與成績 courses = ['數據結構','數據可視化','高數','英語','軟件工程','組成原理','C語言','體育'] scores = [82,95,78,85,45,88,76,88] dataLength = len(scores) #數據長度 #angles數組把圓周等分為dataLength份 angles = np.linspace(0,2*np.pi,dataLength,endpoint=False) scores.append(scores[0]) angless = np.append(angles,angles[0]) #閉合 #繪制雷達圖 plt.polar(angless, #設置角度scores, #設置各個角度上的數據'rv--', #設置顏色、線型和端點符號linewidth=2) #設置線寬 #設置角度網絡標簽 plt.thetagrids(angles*180/np.pi,courses,fontproperties='simhei',fontsize=12,color='k') #填充雷達圖內部 plt.fill(angless,scores,facecolor='g',alpha=0.2) plt.show()8.流向圖?
? ? ? ? 在運輸問題中,常常需要表明產地的產量、銷地的銷量,以及流向和流量的交通圖,此時可以用到流向圖。流向圖能夠直觀地展示數據流向,揭示出運動中的一些規律或現象。
流向圖繪制
import numpy as np import matplotlib.pyplot as plt Y,X = np.mgrid[-3:3:100j,-3:3:100j] U = -1-X**2+Y V = 1+X-Y**2 speed = np.sqrt(U*U+V*V) plt.streamplot(X,Y,U,V,color=U,linewidth = 2,cmap = plt.cm.autumn) plt.colorbar() f,(ax1,ax2) = plt.subplots(ncols=2) ax1.streamplot(X,Y,U,V,density=[0.5,1]) lw = 5*speed/speed.max() ax2.streamplot(X,Y,U,V,density=0.6,color='k',linewidth=lw) plt.show()?
9.繪圖中的表格設置?
? ? ? ? 在繪圖中,有時候需要同時顯示數據表格。Matplotlib在繪圖中提供了table方法可以同時顯示數據表格
在繪圖中顯示數據表格
import numpy as np import matplotlib.pyplot as plt plt.rcParams['font.family'] = ['SimHei'] data = [[66386,174296,75131,577908,32015],[58230,381139,78045,99308,160454],[89135,80552,152558,497981,603535],[78415,81858,150656,193263,69638],[139361,331509,343164,781380,52269]] columns = ('Freeze','Wind','Flood','Quake','Hail') rows = ['%d year'% x for x in (100,50,20,10,5)] values = np.arange(0,2500,500) value_increment = 1000 colors = plt.cm.BuPu(np.linspace(0,0.5,len(columns))) n_rows=len(data) index = np.arange(len(columns))+0.3 bar_width=0.4 y_offset = np.array([0.0]*len(columns)) cell_text = [] for row in range(n_rows):plt.bar(index,data[row],bar_width,bottom=y_offset)y_offset = y_offset+data[row]cell_text.append(['%1.1f'%(x/1000.0) for x in y_offset]) colors = colors[::-1] cell_text.reverse() the_table = plt.table(cellText=cell_text,rowLabels=rows,rowColours = colors,colLabels = columns,loc = 'bottom') plt.subplots_adjust(left=0.2,bottom=0.2) plt.ylabel("Loss in ${0}'s".format(value_increment)) plt.yticks(values*value_increment,['%d' % val for val in values]) plt.xticks([]) plt.title('氣象災害損失') plt.show()10. 極坐標圖?
? ? ? ? 在平面投影中,由X軸和Y軸定位坐標;而在極坐標投影中,需要以半徑和角度的形式定位坐標。極坐標投影中的半徑以圓半徑的大小顯示,并且以每個角度為0°的圓的角度為起點投影角度。要生成極坐標投影,需要將投影類型定義為極坐標。
繪制極坐標圖
import numpy as np import matplotlib.pyplot as plt r = np.linspace(0,2,100) theta = 2*np.pi*r fig = plt.figure(figsize=(13,4)) ax1 = plt.subplot(121,projection='polar') ax1.scatter(theta,r,label='Polar Projection',s=10) ax1.legend(bbox_to_anchor=(0.85,1.35)) ax2 = plt.subplot(122) ax2.scatter(theta,r,label='Polar Projection',s=10) ax2.legend(bbox_to_anchor=(0.85,1.35)) ax2.set_xlabel('R') ax2.set_ylabel(r'$\theta$')11. 詞云圖?
? ? ? ? 詞云用于對網絡文本中出現頻率較高的關鍵詞予以視覺上的突出,形成“關鍵詞云層”或“關鍵詞渲染”,從而過濾掉大量的文本信息,使瀏覽網頁者只需要一眼掃過文本就可以領略文本的主旨。
11.1 安裝相關的包
????????繪制詞需要WordCloud和jieba包。jieba用于從文本的句子里分割出詞匯。兩個包的安裝語句:
pip install wordcloud pip install jieba11.2 詞云生成過程
? ? ? ? 一般生成詞云的過程為:
1)使用Pandas讀取數據并將需要分析的數據轉化為列表
2)對獲得的列表數據使用分詞工具jieba進行遍歷分詞
3)使用WordCloud設置詞云圖片的屬性、掩碼和停用詞,并生成詞云圖像。
?11.3 詞云生成示例:
生成示例在之前博文有發布過,可以參考進行學習。
https://blog.csdn.net/weixin_52797843/article/details/122547594?spm=1001.2014.3001.5502
結尾:
????????關于python pyplot的十一個常用的繪圖到此就分享結束了,感謝大家瀏覽閱讀,有問題可以私信或者加Q 180096010一起交流學習。
覺得文章有用的同學,可以收藏方便以后學習喲~。
總結
以上是生活随笔為你收集整理的一篇文章让你学会绘画十一种常见数据分析图(折线图,直方图,散点图,雷达图等等)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C/C++家族族谱管理系统
- 下一篇: 如何搭建手游联运平台?