您好,登錄后才能下訂單哦!
前言
數據分析就是將數據以各種圖表的形式展現給領導,供領導做決策用,因此熟練掌握餅圖、柱狀圖、線圖等圖表制作是一個數據分析師必備的技能。Python有兩個比較出色的圖表制作框架,分別是Matplotlib和Pyechart。本文主要講述使用Matplotlib制作各種數據圖表。
Matplotlib是最流行的用于繪制2D數據圖表的Python庫,能夠在各種平臺上使用,可以繪制散點圖、柱狀圖、餅圖等。
1、柱狀圖
是一種以長方形或長方體的高度為變量的表達圖形的統計報告圖,由一系列高度不等的縱向條紋表示數據分布的情況,用來比較兩個或以上的價值(不同時間或者不同條件),只有一個變量,通常利用于較小的數據集分析。柱狀圖可以用來比較數據之間的多少,可以用來觀察某一事件的變化趨勢,柱狀圖亦可橫向排列,或用多維方式表達。
實現代碼:
# 導入繪圖模塊 import matplotlib.pyplot as plt # 構建數據 sales = [7125,12753,13143,8635] # 中文亂碼的處理,rcParams也可以用于設置圖的分辨率,大小等信息 plt.rcParams['font.sans-serif'] =['SimHei'] plt.rcParams['axes.unicode_minus'] = False # 繪圖,第一個參數是x軸的數據,第二個參數是y軸的數據,第三個參數是柱子的大小,默認值是1(值在0到1之間),color是柱子的顏色,alpha是柱子的透明度 plt.bar(range(4), sales, 0.4,color='r', alpha = 0.8) # 添加軸標簽 plt.ylabel('銷量') # 添加標題 plt.title('水果2018年度銷量') # 添加刻度標簽 plt.xticks(range(4),['蘋果','香蕉','梨','獼猴桃']) # 設置Y軸的刻度范圍 plt.ylim([5000,15000]) # 為每個條形圖添加數值標簽 for x,y in enumerate(sales): plt.text(x,y+100,'%s' %y,ha='center') # 顯示圖形 plt.show()
效果圖:
只需繪制柱狀圖的函數bar()改成barh()就可以將柱狀圖長方形或長方體從垂直方向變為水平方向。
實現代碼:
# 導入繪圖模塊 import matplotlib.pyplot as plt # 構建數據 sales = [7125,12753,13143,8635] # 中文亂碼的處理 plt.rcParams['font.sans-serif'] =['SimHei'] plt.rcParams['axes.unicode_minus'] = False x = ['蘋果','香蕉','梨','獼猴桃'] # 繪圖 plt.barh(range(4), sales, 0.4,color='r', alpha = 0.8) # 添加軸標簽 plt.ylabel('銷量') # 添加標題 plt.title('水果2018年度銷量') # 添加刻度標簽 plt.yticks(range(4),['蘋果','香蕉','梨','獼猴桃']) # 設置Y軸的刻度范圍 plt.xlim([5000,15000]) # 為每個條形圖添加數值標簽 for x,y in enumerate(sales): plt.text(y+0.2,x,'%s' %y,va='center') # 顯示圖形 plt.show()
效果圖:
除了bar()函數變成barh()之外。還有其他幾個地方要做修改,在給每個條形圖添加數值標簽時,將ha='center'改為va='center',將添加x軸標簽的方法從xlabel改為ylabel。
柱狀圖和折線圖混合使用
柱狀圖可以和折線圖混合使用,用來表示某一個數據的變化趨勢,下面是例子的柱狀圖表示水果的年度銷量,折線圖表示水果1月份的銷量。
代碼:
# 導入繪圖模塊 import matplotlib.pyplot as plt jan_sales = [3010,4029,5021,3056] # 構建數據 sales = [7125,12753,13143,8635] # 中文亂碼的處理 plt.rcParams['font.sans-serif'] =['SimHei'] plt.rcParams['axes.unicode_minus'] = False x = ['蘋果','香蕉','梨','獼猴桃'] plt.plot(x,jan_sales,'r')# 折線 1 x 2 y 3 color plt.plot(x,jan_sales,'g',lw=5)# 4 line w # 繪圖 plt.bar(range(4), sales, 0.4,color='b', alpha = 0.8) # 添加軸標簽 plt.ylabel('銷量') # 添加標題 plt.title('水果2018年度銷量') # 添加刻度標簽 plt.xticks(range(4),['蘋果','香蕉','梨','獼猴桃']) # 設置Y軸的刻度范圍 plt.ylim([2000,15000]) # 為每個條形圖添加數值標簽 for x,y in enumerate(sales): plt.text(x,y+100,'%s' %y,ha='center') # 顯示圖形 plt.show()
效果圖:
2、折線圖
折線圖主要用于表示數據變化的趨勢。折線圖是直線將不同的點連接起來。
# 導入繪圖模塊 import matplotlib.pyplot as plt #構建數據 jan_sales = [3010,4029,5021,3056] # 中文亂碼的處理 plt.rcParams['font.sans-serif'] =['SimHei'] plt.rcParams['axes.unicode_minus'] = False x = ['蘋果','香蕉','梨','獼猴桃'] #第一個參數是x軸,第二參數時y軸數據,第三個參數是線的顏色,第二個參數是線條的粗細 plt.plot(x,jan_sales,'r',lw=5)# 4 line w # 添加標題 plt.title('水果2018年度1月份銷量圖') plt.ylim([2000,15000]) # 為每個點添加數值標簽 for x,y in enumerate(jan_sales): plt.text(x,y+100,'%s' %y,ha='center') # 顯示圖形 plt.show()
效果圖:
折線圖通過調用plot()方法繪制。
3、餅圖
餅圖主要是用來表示數據的占比,給人一眼就可以看出數據的占比大小。餅圖使用pie()函數繪制。
import matplotlib.pyplot as plt # 設置繪圖的主題風格(不妨使用R中的ggplot分隔) plt.style.use('ggplot') # 構造數據 edu = [0.2515,0.3724,0.3336,0.0368,0.0057] labels = ['蘋果','香蕉','梨','獼猴桃','桔子'] explode = [0,0.1,0,0,0] # 用于突出顯示大專學歷人群 colors=['#FEB748','#EDD25D','#FE4F54','#51B4FF','#dd5555'] # 自定義顏色 # 中文亂碼和坐標軸負號的處理 plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False # 將橫、縱坐標軸標準化處理,保證餅圖是一個正圓,否則為橢圓 plt.axes(aspect='equal') # 控制x軸和y軸的范圍 plt.xlim(0,4) plt.ylim(0,4) # 繪制餅圖 plt.pie(x = edu,# 繪圖數據 explode=explode, # 突出顯示香蕉人群 labels=labels, # 添加水果銷量水平標簽 colors=colors, # 設置餅圖的自定義填充色 autopct='%.1f%%', # 設置百分比的格式,這里保留一位小數 pctdistance=0.8,# 設置百分比標簽與圓心的距離 labeldistance = 1.15, # 設置銷量水平標簽與圓心的距離 startangle = 180, # 設置餅圖的初始角度 radius = 1.5, # 設置餅圖的半徑 counterclock = False, # 是否逆時針,這里設置為順時針方向 wedgeprops = {'linewidth': 1.5, 'edgecolor':'green'},# 設置餅圖內外邊界的屬性值 textprops = {'fontsize':12, 'color':'k'}, # 設置文本標簽的屬性值 center = (1.8,1.8), # 設置餅圖的原點 frame = 1)# 是否顯示餅圖的圖框,這里設置顯示 # 刪除x軸和y軸的刻度 plt.xticks(()) plt.yticks(()) # 添加圖標題 plt.title('2018年水果銷量分析') # 顯示圖形 plt.show()
效果圖:
簡單介紹下pie函數參數:
4、散點圖
散點圖主要的作用是判斷兩個變量之間關系的強弱或者是否存在關系。
散點圖由scatter()方法繪制。
import numpy as np import matplotlib.pyplot as plt # 數據個數 n = 50 # 均值為0, 方差為1的隨機數 x = np.random.normal(0, 1, n) y = np.random.normal(0, 1, n) # 計算顏色值 color = np.arctan2(y, x) # 繪制散點圖 plt.scatter(x, y, s = 75, c = color, alpha = 0.5) # 設置坐標軸范圍 plt.xlim((-1.5, 1.5)) plt.ylim((-1.5, 1.5)) # 不顯示坐標軸的值 plt.xticks(([-1,0,1,2,3,4])) plt.yticks(([-1,0,1,2,3,4])) plt.show()
效果圖:
5、箱線圖
箱線圖一般用來展現數據大小、占比、趨勢等等的呈現,其包含一些統計學的均值、分位數、極值等等統計量,因此,該圖信息量較大,不僅能夠分析不同類別數據平均水平差異(需在箱線圖中加入均值點),還能揭示數據間離散程度、異常值、分布差異等等。
使用boxplot()方法繪制。
import numpy as np import matplotlib.pyplot as plt import pandas as pd 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() #也可用plot.box() plt.show()
效果圖:
6、雷達圖
雷達圖可以用來顯示一個周期數值的變化,也可以用來展示對個對象/維度之間的關系
import numpy as np import matplotlib.pyplot as plt #標簽 labels = np.array(['語文','數學','英語','生物','物理','化學']) #數據個數 dataLenth = 6 #數據 data = np.array([7,4,3,6,4,8]) angles = np.linspace(0, 2*np.pi, dataLenth, endpoint=False) data = np.concatenate((data, [data[0]])) # 閉合 angles = np.concatenate((angles, [angles[0]])) # 閉合 fig = plt.figure() ax = fig.add_subplot(111, polar=True)# polar參數!! ax.plot(angles, data, 'bo-', linewidth=2)# 畫線 ax.fill(angles, data, facecolor='r', alpha=0.25)# 填充 ax.set_thetagrids(angles * 180/np.pi, labels, fontproperties="SimHei") ax.set_title("matplotlib雷達圖", va='bottom', fontproperties="SimHei") ax.set_rlim(0,10) ax.grid(True) plt.show()
效果圖:
7、氣泡圖
氣泡圖用于判斷3個變量之間是否存在某種關系。它跟散點圖有點類似,只不過氣泡圖以氣泡大小作為新的維度
import pandas as pd import matplotlib.pyplot as plt import pandas as pd d = {"時間":pd.Series([2006,2007,2008,2009,2010]), "數量":pd.Series([10,200,120,150,300]), "大小":pd.Series([50,130,40,50,160]), "分類":pd.Series([1,2,0,1,2]), "判斷":pd.Series([True,True,True,True,True])} df=pd.DataFrame(d) #先定義氣泡大小,rank 函數將大小列進行大小分配,越大的值分配結果也越高 #n 為倍數,用來調節氣泡的大小,且看后頭 size=df['大小'].rank() n=20 #定義一個字典,將顏色跟對應的分類進行綁定 color={0:'red',1:'blue',2:'orange'} #增加color的參數,用列表解析式將data分類中的每個數據的數字映射到前面color的顏色中 plt.scatter(df['數量'],df['大小'],color=[color[i] for i in df['分類']],s=size*n,alpha=0.6) plt.show()
效果圖:
氣泡圖用也是scatter方法繪制,和散點圖一樣。差別在于點的大小不一樣,散點圖的點都是一樣的,而氣泡圖點的大小不一樣。
以上就是柱狀圖、散點圖、氣泡圖、折線圖的實現方式。希望給大伙帶來幫助。
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。