matplotlib柱狀圖、面積圖、直方圖、散點圖、極坐標圖、箱型圖

一、柱狀圖

1.通過obj.plot()

柱狀圖用bar表示,可通過obj.plot(kind='bar')或者obj.plot.bar()生成;在柱狀圖中添加參數stacked=True,會形成堆疊圖。

fig,axes = plt.subplots(2,2,figsize=(10,6))
s = pd.Series(np.random.randint(0,10,15),index = list('abcdefghijklmno'))
df = pd.DataFrame(np.random.rand(10,3),columns = ['A','B','C'])
s.plot(kind = 'bar',ax = axes[0,0]) #kind表示圖表類型
df.plot(kind = 'bar',ax = axes[0,1])
df.plot.bar(ax = axes[1,0],stacked = True)   #stacked = True表示顯示為堆疊樣式
df.plot.barh(ax = axes[1,1])  #橫向的柱狀圖

?2.通過plt.bar(x,y)

?直接使用plt.bar()時,需要在參數中指定x軸和y軸表示的數據。

plt.figure(figsize=(8,6))
x = np.arange(10)
y1 = np.random.rand(10)
y2 = -np.random.rand(10)plt.bar(x,y1,yerr = 0.1 * y1)
for i,j in zip(x,y1):plt.text(i-0.3,j+0.05,'%.2f'%j)  #添加標簽-0.3和+0.05是為了讓標簽的位置更合理

plt.bar(x,y2)

柱狀圖外嵌圖表

通過plt.table()可以實現在柱狀圖下方附上表格的功能。

plt.table(cellText=data.T,cellLoc='center',cellColours=None,rowLabels=cols,rowLoc='center',colLabels=rows,colLoc='center',loc='bottom')

  • cellText:表格內容,通常為DataFrame的values部分
  • cellLoc:表格內容的對齊方式,通常為center居中對齊
  • cellColours:表格內容背景顏色
  • rowLabels:行標簽
  • rowLoc:行標簽的對齊方式
  • colLabels:行標簽的背景顏色
  • colLoc:列標簽的對齊方式
  • loc:表格位置,常用bootom,
data = np.array([[1,2,3,1,2],[3,4,5,3,4],[2,3,4,2,3],[4,5,6,3,4]])
rows = ['x','y','z','w']
cols = ['a','b','c','d','e']
df = pd.DataFrame(data,index = rows,columns=cols)
df.plot(kind='bar',stacked=True,colormap='Blues_r')
plt.xticks([])  #去掉x軸的刻度標簽,避免與下方的表格的列標簽重合
plt.table(cellText=data.T,cellLoc='center',cellColours=None,rowLabels=cols,rowLoc='center',\
rowColours=plt.cm.BuPu(np.linspace(0,0.5,5))[::-1],colLabels=rows,colLoc='center',colColours=None,loc='bottom')

二、面積圖

面積圖使用obj.plot(kind='area')或者obj.plot.area()生成,沒有plt.area()方法。

面積圖默認是堆疊的,并且要求值必須同時為正值或同時為負值;如果既有正值也有負值,不能堆疊,需要使用參數stacked=False。

fig,axes = plt.subplots(1,2,figsize=(10,6))
df1 = pd.DataFrame(np.random.rand(10,3),columns=['A','B','C'])
df2 = pd.DataFrame(np.random.randn(10,3),columns=['a','b','c'])
df1.plot.area(colormap='summer',ax = axes[0])
df2.plot(kind='area',stacked = False,ax = axes[1])

?

三、填圖

填充x軸與一個y軸之間的空間:需要y軸與x軸有交叉,否則不會顯示

填充兩個y軸之間的空間:相當于兩個y軸的差

fig,axes = plt.subplots(1,2,figsize=(10,4))
x = np.linspace(0,1,500)
y1 = np.sin(4*np.pi*x)
y2 = -np.sin(4*np.pi*x)
# y1 = 2*x
# y2 = -x  #調成y1和y2都沒有效果
axes[0].fill(x,y1,'lightblue',label='y1')
axes[0].fill(x,y2,'pink',label='y2')
axes[1].fill_between(x,y1,y2,color = 'lightblue',label='y1-y2')#此處需要用color指定顏色,直接寫顏色會報錯

四、餅圖

plt.pie(s,explode=None,labels=None,colors=None,autopct=None,pctdistance=0.6,labeldistance=1.1,shadow=False,startangle=None,radius=None,frame=False)

  • s:一個Seris
  • explode:突出的餅塊位置及突出大小
  • labels:餅塊的標簽
  • colors:餅塊的顏色
  • autopct:餅塊的值的顯示格式
  • pctdistance:餅塊的值距離圓心的距離,相對于半徑來說
  • labeldistance:標簽距離圓心的距離,相對于半徑來說
  • shadow:是否顯示陰影
  • startangle:第一個餅開始的地方,默認從水平線開始逆時針方向進行,30表示從水平方向逆時針旋轉30°的地方開始
  • radius:半徑的長度
s = pd.Series(np.random.rand(4),index=['a','b','c','d'])
plt.axis('equal')  #
plt.pie(s,explode=[0.1,0,0,0],labels=s.index,colors=['r','g','b','y'],autopct='%.2f%%',pctdistance=0.5,\labeldistance=1.2,shadow=False,startangle=0,radius=1.2,frame=False)

五、直方圖

柱狀圖是用于展示數值的,而直方圖是用來統計頻率的。

hist(x, bins=None, range=None, density=None, weights=None,cumulative=False, bottom=None, histtype='bar', align='mid',orientation='vertical', rwidth=None,

  log=False, color=None,label=None, stacked=False, normed=None, *, data=None,**kwargs)

  • bins柱子的數量,即將樣本分為多少個組進行統計
  • histtype:直方圖的風格,默認為bar,其他還有step、stepfilled、barstacked(有時候對于df不起作用,堆疊直方圖一般不用s.hist())
  • align:對齊方式,默認為mid居中對齊,其他還有left和right
  • orientation:方向,默認為vertical豎直方向,其他horizontal
  • mormed:密度,默認為False,y軸顯示數量,True表示y軸顯示為0-1的區間,與密度圖類似
  • grid:直方圖默認有網格
fig,axes = plt.subplots(1,2,figsize=(10,5))
s = pd.Series(np.random.randn(1000))
s.hist(bins=20,histtype='bar',align='right',orientation='vertical',alpha=0.8,density=False,grid=True,ax=axes[0])#四種方式
# s.plot(kind='hist') 
# s.plot.hist() 
# plt.hist(s,bins=30)
s.hist(bins=20,alpha=0.8,density=True,ax=axes[1]) #直方圖形式的密度圖
s.plot(kind='kde',ax=axes[1] )#密度圖

?

堆疊直方圖,由于直方圖的histtype設置為batstacked經常不生效,生成多系列的堆疊直方圖常使用df.plot()或df.plot.hist()來生成

df = pd.DataFrame({'A':np.random.randn(1000),'B':np.random.randn(1000),'C':np.random.randn(1000)})
df.plot.hist(stacked=True)
# df.plot(kind='hist',stacked=True)
# df.hist(stacked=True,histtype='barstacked')  #不起作用,生成3個獨立的直方圖
# plt.hist(df) #無法使用

六、散點圖

plt.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, *, plotnonfinite=False, data=None, **kwargs)
# x和y分別表示x軸和y軸數據
# s表示點的大小,可以為一個數值,也可為一變量,為變量則s可表示除x和y的另一個維度
# c表示點的顏色,可以為一具體顏色,也可為一變量,為變量則c可表示除x和y的另一個維度
# vmin和vmax表示亮度的最小和最大值,是一個具體的數值
plt.figure(figsize=(8,5))
x = np.random.randn(1000)
y = np.random.randn(1000)
plt.scatter(x,y,s =np.random.randn(1000)*30,c=np.random.randn(1000)*30,cmap='Reds') #只有這一種方法

?

矩陣散點圖是pandas中的方法,不是matplotlib中的方法,常用來看各個指標之間的關系。

df = pd.DataFrame(np.random.randn(100,3),columns = ['A','B','C'])
pd.plotting.scatter_matrix(df,figsize=(8,8),diagonal='kde',marker='o',range_padding=0.1)
# 將df的三列進行兩兩對比,尋找任意兩個之間的關系
# diagonal為對角線處的圖表顯示類型,即每一列自身,常用bar或kde
# range_padding為圖表與x軸和y軸之間的空白

七.極坐標圖

極坐標圖是以一個圓盤進行顯示的,起點為右側水平方向的半徑,距離起點的角度相當于x軸,距離圓心的距離相當于y軸。

s = pd.Series(np.arange(20))
arr = np.arange(0,2*np.pi,00.2)
fig = plt.figure(figsize=(10,5))
ax1 = plt.subplot(121,polar = True) 
# ax1 = fig.add_subplot(121,projection='polar') #polar的兩種參數寫法等價,表示創建極坐標
ax2 = plt.subplot(122)ax1.plot(s,linestyle='--',marker='o')
ax1.plot(arr,arr*3,linestyle='--',marker='.',color = 'r',lw=1)
ax2.plot(s,linestyle='--',marker='o')
ax2.plot(arr,arr*3,linestyle='--',marker='.',color = 'r',lw=1)
極坐標演示

?

下面以兩個對比的例子解釋極坐標的相關參數

arr = np.arange(0,2*np.pi,00.2)
fig = plt.figure(figsize = (10,5))
ax1 = fig.add_subplot(121,polar=True)
ax2 = fig.add_subplot(122,polar=True)
ax1.plot(arr,arr*2,linestyle='--',lw=2)
ax2.plot(arr,arr*2,linestyle='--',lw=2)ax2.set_title('ax2') #設置標題
ax2.set_theta_direction(-1) #角度旋轉方向,默認為逆時針,-1表示順時針
ax2.set_thetagrids(np.arange(0,360,90),['a','b','c','d']) #設置極坐標角度網格線(即將圓盤分為幾個扇形)顯示及標簽,標簽默認顯示為角度
ax2.set_rgrids([0,3,6,9,12,15]) #設置網格線顯示(即不同半徑的圓)
ax2.set_theta_offset(np.pi/4)  #設值網格起點的角度偏移,默認是水平線右側為起點,偏移為逆時針方向偏移
ax2.set_rlim(0,18) #設置網格線的顯示范圍
ax2.set_rmax(18)  #設置極坐標的半徑
ax2.set_rticks([0,3,6,9,12,15,18])  #設置網格線的顯示范圍
極坐標參數演示

?

在極坐標圖中繪制極軸圖

arr = np.arange(0,np.pi*2,np.pi*0.2)
data1 = np.random.randint(1,10,10)
fig = plt.figure(figsize = (10,6))
ax1 = plt.subplot(111,polar=True)
bar = ax1.bar(arr,data1,alpha = 0.7)
print(bar,type(bar))  #即一個包含各個扇形的容器,一共10個
# <BarContainer object of 10 artists> <class 'matplotlib.container.BarContainer'>
極軸圖

?

八、雷達圖

雷達圖可以在極坐標圖的基礎上繪制再填充,也可以直接通過plt.polar()生成。

arr = np.arange(0,np.pi*2,np.pi*0.2)
data1 = np.random.randint(1,10,10)
data2 = np.random.randint(1,10,10)fig1 = plt.figure(figsize=(10,6))
ax1 = fig1.add_subplot(111,polar = True)
ax1.plot(arr,data1,linestyle='--')  #繪制極坐標圖,首尾不相連,是折線圖
ax1.fill(arr,data1,alpha=0.7)   #將折線圖內部填充顏色,看起來就像是首尾相連,但其實首尾之間并沒有連接的線
ax1.plot(arr,data2,linestyle='--')
ax1.fill(arr,data2,alpha=0.7)arr = np.concatenate((arr,[arr[0]]))  #將原數據與原數據中的第一個值進行拼接
data1 = np.concatenate((data1,[data1[0]]))  #將原數據與原數據中的第一個值進行拼接
fig2 = plt.figure(figsize=(10,6))
plt.polar(arr,data1,'--')  #直接通過plt.polar繪制,結果是一個首尾相連的圖
plt.fill(arr,data1,alpha = 0.7)  #填充內部
雷達圖的兩種生成方式

??

九、箱型圖

箱形圖又稱為盒須圖、盒式圖或箱線圖,是一種用于顯示一組數據分散情況資料的統計圖。

箱型圖包含一組數據的最大值(上內限)、最小值(下內限)、中位數、上四分位數、下四分位數和異常值,計算時將數據按照從大到小的順序排列。

計算四分位的位置有(n+1) / 4和(n-1) / 4兩種,一般采用前者。

  • 上四分位數:Q3,位置(n+1) / 4,
  • 中位數:位置(n+1)/2
  • 下四分位數:Q1,位置3*(n+1) / 4,四分位差為上四分位數-下四分位數,即IQR=Q3-Q1
  • 內限:箱型圖的盒須,上內限最大值為Q3+1.5IQR,下內限最小值為Q1-1.5IQR
  • 外限:上外限最大值為Q3+3IQR,下外限最小值為Q1-3IQR
  • 異常值:上線內限之間的為正常值,上下內限之外、外限之內的為中度異常值,默認用空心圓表示,上下外限之外的為極度異常值,默認用實心圓表示。

?

boxplot(x, notch=None, sym=None, vert=None, whis=None, positions=None, widths=None, patch_artist=None, bootstrap=None, 
     usermedians=None, conf_intervals=None, meanline=None, showmeans=None, showcaps=None, showbox=None, showfliers=None,
     boxprops=None, labels=None, flierprops=None, medianprops=None, meanprops=None, capprops=None, whiskerprops=None,
     manage_ticks=True, autorange=False, zorder=None, *, data=None)

具體參數使用可參考:https://matplotlib.org/api/_as_gen/matplotlib.pyplot.boxplot.html

fig,axes = plt.subplots(1,2,figsize=(10,6))
df = pd.DataFrame(np.random.rand(10,5),columns=['A','B','C','D','E'])
color = dict(boxes = 'DarkGreen',whiskers = 'DarkOrange',medians = 'DarkBlue',caps = 'Gray')
df.plot.box(ax = axes[0],color = color,grid = True)
df.plot(kind='box',ax = axes[1],color = color,vert = False,positions = [1,2,5,4,6])#position表示五列分別位于y軸上1、2、5、4、6的位置上

figure = plt.figure(figsize=(10,6))
f = df.boxplot(vert = True, #是否垂直,默認為Truesym = 'o', #異常點形狀,參考markerwhis = 1.5, #
           patch_artist = True, #上下四分位框內是否填充showmeans = True,  #是否顯示均值meanline = False, #如果顯示均值采用何種形狀,True是虛線,False則為三角形showbox = True,  #是否顯示箱線showcaps = True, #是否顯示邊緣線,即上內限和下內限showfliers = True, #是否顯示異常值notch = False,  #中間箱體是否缺口
#            return_type = 'dict'  #返回類型為字典
          )
# plt.boxplot(df)  boxplot()另一種使用方法
箱型圖演示

? ? ? ?

其中whis表示設置上、下內限時Q3-Q1的比例,默認為1.5,也可以設置一個區間例如[5,95]

df.boxplot()的執行結果默認返回一個<class 'matplotlib.axes._subplots.AxesSubplot'>,參數return_type = 'dict'表示返回一個字典,字典的key包括了boxes箱線、medians中位線、whiskers從box到上下內限的豎線、fliers異常值、caps上下內限的線、means均值線。設置返回字典是為了方便后續對圖表進行顯示設置,假設設置了返回類型為字典,后續對中位線操作for m in f['medians']:m.set(color='y',linewidth = 3),可在圖表生成后調整整個圖表的顯示屬性。

?

上述示例是對df的每一列分別進行了統計,箱線圖也可以實現對列進行分組然后統計。

df = pd.DataFrame(np.random.rand(10,2),columns=['A','B'])
df['C'] = pd.Series(['x','x','y','x','x','y','y','y','x','x'])
df['D'] = pd.Series(['x','y','y','x','x','y','y','y','x','y'])
f1 = df.boxplot(by = 'C',return_type = 'dict')  #按照C列分組然后統計,D列不為數值統計時忽略
f2 = df.boxplot(by = ['C','D'],column = 'A',return_type = 'dict') #按照C列和D列分組然后統計,只統計A列
箱型圖分組統計演示

? ? ?

?

?

?

?

官方教程參考:https://matplotlib.org/api/pyplot_api.html

?

轉載于:https://www.cnblogs.com/Forever77/p/11315292.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/391839.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/391839.shtml
英文地址,請注明出處:http://en.pswp.cn/news/391839.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

微信支付商業版 結算周期_了解商業周期

微信支付商業版 結算周期Economics is an inexact science, finance and investing even more so (some would call them art). But if there’s one thing in economics that you can consistently count on over the long run, it’s the tendency of things to mean revert …

leetcode 448. 找到所有數組中消失的數字

給定一個范圍在 1 ≤ a[i] ≤ n ( n 數組大小 ) 的 整型數組&#xff0c;數組中的元素一些出現了兩次&#xff0c;另一些只出現一次。 找到所有在 [1, n] 范圍之間沒有出現在數組中的數字。 您能在不使用額外空間且時間復雜度為O(n)的情況下完成這個任務嗎? 你可以假定返回…

前端初學者開發學習視頻_初學者學習前端開發的實用指南

前端初學者開發學習視頻by Nikita Rudenko通過尼基塔魯登科(Nikita Rudenko) 初學者學習前端開發的實用指南 (A practical guide to learning front end development for beginners) I started my coding journey in spring 2018, a bit less than one year ago. I earned som…

weblogic啟動失敗案例(root啟動引起的權限問題)

weblogic的一個domain啟動失敗&#xff0c;在日志中有如下信息提示&#xff1a; **************************************************** To start WebLogic Server, use a username and ** password assigned to an admin-level user. For ** server administration, us…

HTTP請求示例

HTTP請求格式當瀏覽器向Web服務器發出請求時&#xff0c;它向服務器傳遞了一個數據塊&#xff0c;也就是請求信息&#xff0c;HTTP請求信息由3部分組成&#xff1a;l 請求方法URI協議/版本l 請求頭(Request Header)l 請求正文下面是一個HTTP請求的例子&#xff1a;GET/sa…

Bootstrap——可拖動模態框(Model)

還是上一個小項目&#xff0c;o(╥﹏╥)o&#xff0c;要實現點擊一個div或者button或者一個東西然后可以彈出一個浮在最上面的彈框。網上找了找&#xff0c;發現Bootstrap的Model彈出框可以實現該功能&#xff0c;因此學習了一下&#xff0c;實現了基本彈框功能&#xff08;可拖…

mfcc中的fft操作_簡化音頻數據:FFT,STFT和MFCC

mfcc中的fft操作What we should know about sound. Sound is produced when there’s an object that vibrates and those vibrations determine the oscillation of air molecules which creates an alternation of air pressure and this high pressure alternated with low …

leetcode 765. 情侶牽手(并查集)

N 對情侶坐在連續排列的 2N 個座位上&#xff0c;想要牽到對方的手。 計算最少交換座位的次數&#xff0c;以便每對情侶可以并肩坐在一起。 一次交換可選擇任意兩人&#xff0c;讓他們站起來交換座位。 人和座位用 0 到 2N-1 的整數表示&#xff0c;情侶們按順序編號&#xff…

ariel字體_播客第58集:軟件開發人員和freeCodeCamp超級巨星Ariel Leslie

ariel字體On this weeks episode of the freeCodeCamp.org podcast, Abbey interviews Ariel Leslie, a software developer and avid contributor to the freeCodeCamp community.在本周的freeCodeCamp.org播客節目中&#xff0c;Abbey采訪了Ariel Leslie&#xff0c;他是free…

PHP繪制3D圖形

PEAR提供了Image_3D Package來創建3D圖像。圖像或光線在3D空間中按照X、Y 、Z 坐標定位。生成的圖像將呈現在2D空間中&#xff0c;可以存儲為 PNG、SVG 格式&#xff0c;或輸出到Shell。通過Image_3D可以很方便生成一些簡單的3D對象&#xff0c;例如立方體、錐體、球體、文本和…

清除日志的sql

SET NOCOUNT ONDECLARE LogicalFileName sysname,MaxMinutes INT,NewSize INTUSE cms -- 要操作的數據庫名SELECT LogicalFileName cms_log, -- 日志文件名MaxMinutes 10, -- Limit on time allowed to wrap log.NewSize 100 -- 你想設定的日志文件的大小(M)-- Setup / init…

r語言怎么以第二列繪制線圖_用衛星圖像繪制世界海岸線圖-第二部分

r語言怎么以第二列繪制線圖Part I of this blog series is here.本博客系列的第一部分 在這里 。 At the UKHO we are interested in the oceans, the seabed and the coastline — not to mention everything in and on them! In our previous blog, we (the UKHO Data Scien…

javascript創建類_如何在10分鐘內使用JavaScript創建費用管理器

javascript創建類by Per Harald Borgen通過Per Harald Borgen 如何在10分鐘內使用JavaScript創建費用管理器 (How to create an expense organizer with JavaScript in 10 minutes) 讓我們使用ES6和Dropbox API來防止收據變得混亂。 (Let’s use ES6 and the Dropbox API to k…

豆瓣API

Api V2 索引 圖書Api V2 電影Api V2 音樂Api V2 同城Api V2 廣播Api V2 用戶Api V2 日記Api V2 相冊Api V2 線上活動Api V2 論壇Api V2 回復Api V2 我去Api V2 https://developers.douban.com/wiki/?titleapi_v2 搜索圖書 GET https://api.douban.com/v2/book/search參數意義…

leetcode 485. 最大連續1的個數

給定一個二進制數組&#xff0c; 計算其中最大連續1的個數。 示例 1: 輸入: [1,1,0,1,1,1] 輸出: 3 解釋: 開頭的兩位和最后的三位都是連續1&#xff0c;所以最大連續1的個數是 3. 解題思路 遇到0時&#xff0c;將連續1的長度歸零。遇到1時&#xff0c;累加進長度 代碼 c…

HDU Today

經過錦囊相助&#xff0c;海東集團終于度過了危機&#xff0c;從此&#xff0c;HDU的發展就一直順風順水&#xff0c;到了2050年&#xff0c;集團已經相當規模了&#xff0c;據說進入了錢江肉絲經濟開發區500強。這時候&#xff0c;XHD夫婦也退居了二線&#xff0c;并在風景秀美…

JSP基礎--動作標簽

JSP基礎--動作標簽 JSP動作標簽 1 JSP動作標簽概述 動作標簽的作用是用來簡化Java腳本的&#xff01; JSP動作標簽是JavaWeb內置的動作標簽&#xff0c;它們是已經定義好的動作標簽&#xff0c;我們可以拿來直接使用。 如果JSP動作標簽不夠用時&#xff0c;還可以使用自定義標…

整數存儲怎么轉化為浮點數_非整數值如何存儲在浮點數中(以及為什么要浮點數)...

整數存儲怎么轉化為浮點數by Shukant Pal通過Shukant Pal 非整數值如何存儲在浮點數中(以及為什么要浮點數) (How non-integer values are stored in a float (and why it floats)) Did you ever think how computers work on floating-point numbers? I mean — where does …

rcp rapido_Rapido使用數據改善乘車調度

rcp rapidoGiven our last blog post of the series, which can be found here :鑒于我們在該系列中的最后一篇博客文章&#xff0c;可以在這里找到&#xff1a; We thought it would be helpful to explain how we implemented all of the above into an on-ground experimen…

LeetCode 695. Max Area of Island javascript解決方案

題意&#xff1a; 尋找最大島。leetcode.com/problems/ma… 傳入&#xff1a; [[0,0,1,0,0,0,0,1,0,0,0,0,0], [0,0,0,0,0,0,0,1,1,1,0,0,0], [0,1,1,0,1,0,0,0,0,0,0,0,0], [0,1,0,0,1,1,0,0,1,0,1,0,0], [0,1,0,0,1,1,0,0,1,1,1,0,0], [0,0,0,0,0,0,0,0,0,0,1,0,0], [0…