準(zhǔn)備工作
導(dǎo)入要使用的庫
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sb #sns也可以
%matplotlib inline
柱狀圖(條形圖)
sb.countplot(data = 此處寫數(shù)據(jù)df,
x(或者是y) = 列的名字,
color = 一個三項元組(由來可由下面來得到), order = 排序后的列表(可通過pd.series.value_counts()方法得到排序結(jié)果),
hue = x如果設(shè)置的是大分類赊窥,hue就是設(shè)置的小分類,
palette=顏色格式,
以及其他參數(shù)最好自己嘗試然后記錄一下…………);
#難得的有個分號在后面狸页,并非必須锨能,有分號就是只顯示圖扯再,干凈利落一點
(1)sb.color_palette
#會用來返回當(dāng)前圖表中所使用到的顏色,比如第一個柱子的顏色址遇,是由一個三項的元組組成(為什么三項熄阻,畫圖工具調(diào)色里也有,紅綠藍(lán)配比)
Series.value_counts(normalize=False, sort=True, ascending=False, bins=None, dropna=True)
#可以通過pd Series方法來返回包含唯一值計數(shù)的對象倔约。結(jié)果對象將按降序排列秃殉,以便第一個元素是最常出現(xiàn)的元素。 默認(rèn)排除NA值浸剩。具體參數(shù)含義可以參考文檔
(2)matplotlib xticks yticks
#在matplotlib中ticks表示的是刻度钾军,而刻度有兩層意思,一個是刻標(biāo)(locs)绢要,一個是刻度標(biāo)簽(tick labels)吏恭。在作圖時,x軸y軸都是連續(xù)的袖扛,所以刻標(biāo)可以隨意指定,就是在連續(xù)變量上找尋位置砸泛,而刻度標(biāo)簽則可以對應(yīng)替換
xticks()返回了兩個對象,一個是刻標(biāo)(locs)十籍,另一個是刻度標(biāo)簽
locs, labels = xticks()
plt.xticks(有兩個重要的可選蛆封,一個是刻度列表,一個是每一個刻度顯示的標(biāo)簽勾栗,剩下都是關(guān)鍵字參數(shù)惨篱,比如rotation = 旋轉(zhuǎn)多少度)
plt.yticks(跟xticks類似的)
# 顯示x軸的刻標(biāo)
xticks( arange(6) )
# 顯示x軸的刻標(biāo)以及對應(yīng)的標(biāo)簽
xticks( arange(5), ('Tom', 'Dick', 'Harry', 'Sally', 'Sue') )
(3)pandas.melt(frame, id_vars=None, value_vars=None, var_name=None, value_name='value', col_level=None)
#melt該功能描述很復(fù)雜啊,主要是選定幾列作為基準(zhǔn)行(id_vars)围俘,將另外選定的幾行作為行內(nèi)的屬性
#舉個例子
>>> import pandas as pd
>>> df = pd.DataFrame({'A': {0: 'a', 1: 'b', 2: 'c'},
... 'B': {0: 1, 1: 3, 2: 5},
... 'C': {0: 2, 1: 4, 2: 6}})
>>> df
A B C
0 a 1 2
1 b 3 4
2 c 5 6
>>> pd.melt(df, id_vars=['A'], value_vars=['B', 'C'])
A variable value
0 a B 1
1 b B 3
2 c B 5
3 a C 2
4 b C 4
5 c C 6
(4)matplotlib.pyplot.text(x, y, s, fontdict=None, withdash=False, **kwargs)
#將文本s添加到位于數(shù)據(jù)坐標(biāo)中的位置x砸讳,y處的軸
#x,y是指位置,s就是要顯示的text內(nèi)容界牡,剩下參數(shù)就自行研究了
#
countplot
color_palette
value_counts
matplotlib xticks yticks
pandas.melt
matplotlib.pyplot.text
matplotlib.pyplot.bar
餅圖
matplotlib.pyplot.pie(x, explode=None, labels=None, colors=None,
autopct=None, pctdistance=0.6,
shadow=False, labeldistance=1.1,
startangle=None, radius=None,
counterclock=True, wedgeprops=None,
textprops=None, center=(0, 0), frame=False,
rotatelabels=False, hold=None, data=None)
制作一個數(shù)組x的餅圖簿寂。 每個部分的分?jǐn)?shù)面積由x / sum(x)給出。 如果sum(x)<1宿亡,那么x的值直接給出分?jǐn)?shù)區(qū)域常遂,并且數(shù)組不會被歸一化。 結(jié)果派將有一個大小為1 - sum(x)的空部分挽荠。
各個部分是逆時針繪制的克胳,默認(rèn)從x軸開始。
必選參數(shù)x是Series數(shù)據(jù)圈匆,labels可自定義漠另,startangle決定了起始的角度默認(rèn)是x軸,counterclock是說逆時針還是順時針跃赚。
其他具體參數(shù)含義需參考api文檔笆搓。
直方圖
matplotlib.pyplot.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, hold=None,
data=None, **kwargs)
主要作用是計算并繪制x的直方圖。如果輸入包含多個數(shù)據(jù),
則返回值是一個元組(n满败,bin窘奏,patches)或([ n0,n1葫录,...]着裹,bin,[ patches0米同,patches1骇扇,...])。
x :唯一一個必選參數(shù)面粮,表示輸入的數(shù)據(jù)少孝,np的array或者pd的series,dataframe都可以
bin : 整數(shù)或序列(列表或者array等等都可以)熬苍,是可選的
整數(shù)的話稍走,就是整數(shù)個柱子
序列的話,就是給出的序列作為柱子的邊緣柴底,
比如[1,2,3,4]婿脸,那么第一個柱子 (包括1,但不包括2)柄驻,依次類推狐树,共有3個,分別是鸿脓,[1, 2)[2, 3)[3, 4]抑钟,序列呢,就是可以設(shè)置的不那么平均了野哭。
rwidth: 柱體間隔在塔,間隔空隙暗示值是離散的
range:元組或None
決定了bin的上限和下限。較低和較高的異常值將被忽略拨黔。(x.min(), x.max())
另外蛔溃,如果設(shè)置了bins為一個序列的話,那么range會無效注意下蓉驹。
density:布爾型
如果設(shè)置為True城榛,會讓返回的n的值相加為1。決定的是每個格子頻率占總數(shù)的百分比态兴。
cumulative:布爾型
如果設(shè)置為True狠持,圖表就變成了累積型,返回的n也是變成累加的值瞻润,而不是原來那種只有自己的值喘垂,確切來說甜刻,是后面的一個bin是前面的bin的值加上自己的值。
weights:n或者是序列
就像名字一樣正勒,權(quán)重得院,是一組與x形狀相同的權(quán)重,當(dāng)然章贞,如果density設(shè)為True祥绞,weights不生效
還有很多其他參數(shù),不再描述鸭限,可以看官方文檔學(xué)習(xí)蜕径,另外,要多練習(xí)哦
seaborn.distplot(a, bins=None, hist=True, kde=True, rug=False, fit=None,
hist_kws=None, kde_kws=None, rug_kws=None, fit_kws=None, color=None,
vertical=False, norm_hist=False, axlabel=None, label=None, ax=None)
a:必須為Series, 1d-array, 或者 list.不像matplotlib.pyplot.hist那樣败京,第一個數(shù)據(jù)可以是dataframe
hist=True, kde=True,特別注意下兜喻,這兩個參數(shù)默認(rèn)為True
hist為True的情況下會有矩陣的柱形圖
kde是指Kernel Density Estimation核密度估計,通俗點說赡麦,所謂核密度估計朴皆,就是采用平滑的峰值函數(shù)(“核”)來擬合觀察到的數(shù)據(jù)點,從而對真實的概率分布曲線進(jìn)行模擬泛粹。所以遂铡,True是會將數(shù)據(jù)繪制成曲線,曲線下的面積為1戚扳。
rug是指軸須圖忧便,每根須都對應(yīng)著一個數(shù)據(jù)族吻,數(shù)據(jù)密了自然就粗了帽借,一般和其他一些統(tǒng)計圖形(比方說密度曲線之類的)結(jié)合著用,軸須圖可以更好的幫助了解原始數(shù)據(jù)的信息(位置)超歌。
如果你用不到distplot提供的這些功能砍艾,只是想看看分步,用matplotlib.pyplot.hist足以巍举。
常用plt方法
plt.figure
matplotlib.pyplot.figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True, FigureClass=<class 'matplotlib.figure.Figure'>, clear=False, **kwargs)
作用是用來創(chuàng)建一個新的圖像實例
常用這兩個:
num:類似窗體的id號脆荷,或者說窗體標(biāo)題
figsize:以英寸為單位的寬高
plt.subplot
subplot(nrows, ncols, index, **kwargs)
創(chuàng)建一個坐標(biāo)軸,按照坐標(biāo)軸來填充位置懊悯,從坐標(biāo)軸1號位開始沿x軸遞增
plt.subplot(211)跟plt.subplot(2,1,1)是一個意思
就是說建立了一個兩行一列的坐標(biāo)軸蜓谋,圖表的位置在第一行第一列。
plt.xlim(xmin, xmax)
plt.ylim(ymin, ymax)
xlim設(shè)置坐標(biāo)值的最左值和最右值
ylim設(shè)置坐標(biāo)值的最上值和最下值
plt.xscale
首先如果數(shù)據(jù)近似符合分布的數(shù)據(jù)炭分。即采用原始單位的話桃焕,看起來非常偏態(tài):很多數(shù)據(jù)點的值很小,有一個很長的尾部捧毛,尾部數(shù)據(jù)點的值很大观堂。但是對這些值取對數(shù)的話让网,數(shù)據(jù)看起來是正態(tài)分布的,此時就需要xscale了
有這幾種縮放方法:
[‘linear’ | ‘log’ | ‘logit’ | ‘symlog’]
log是log10 只允許正值
linear是線性平時默認(rèn)的那種
logit是0, 1
symlog是對稱對數(shù)师痕,并允許正值和負(fù)值溃睹,允許在曲線內(nèi)設(shè)置一個范圍在零附近線性而不用對數(shù)
plt.grid(True)
圖表帶網(wǎng)格
plt.xscale
plt.xscale log和symlog的區(qū)別
plt.xlim
plt.subplot
plt.figure