數(shù)據(jù)可視化

設(shè)置繪圖可以在jupyter notebook顯示

# 設(shè)置在notebook中直接展示圖形輸出
%matplotlib inline  
# 設(shè)置圖片清晰度
%config InlineBackend.figure_format = 'retina'  

可以使用下面三種方法繪圖

  1. 直接使用DataFrame繪圖兼丰,比如 iris.plot() iris是個(gè)DataFrame數(shù)據(jù),dataframe的繪圖也是基于matplotlib
  2. 導(dǎo)入import matplotlib.pyplot as pltmatplotlib作圖工具包
  3. seaborn 數(shù)據(jù)可視化包

常見的繪圖有:

  • 條形圖
  • 繪制多圖
  • 餅圖
  • 散點(diǎn)圖
  • 直方圖

matplotlib是什么

matplotlib是Python編程語言的一個(gè)繪圖庫,與Python深度集成翻伺,風(fēng)格與Matlab接近

繪圖基礎(chǔ)

繪圖一般使用 matplotlib包中的pyplot
因此 通常我們這么導(dǎo)入

import matplotlib.pyplot as plt

設(shè)置在notebook中直接展示圖形輸出

設(shè)置清晰度
%matplotlib inline  
# 設(shè)置圖片清晰度
%config InlineBackend.figure_format = 'retina'  

plt.plot()是常用的繪圖函數(shù)
plt.show()顯示繪圖

# 設(shè)置橫坐標(biāo)x的取值范圍
x = np.arange(0, 5, 0.1);
# 根據(jù)x的值,通過sin()函數(shù),獲取y的值
y = np.sin(x)
# 使用matplotlib中的plot繪圖函數(shù)
plt.plot(x, y)  
# 添加標(biāo)題币绩、x軸和y軸的名稱
plt.title("sine function") # 標(biāo)題
plt.xlabel("x value") # x坐標(biāo)
plt.ylabel("y value") # y坐標(biāo)
# 顯示圖像
plt.show()

我們可以控制圖形的每一個(gè)細(xì)節(jié)
"b"代表blue,指定藍(lán)色府阀,"-"指定線的種類
linewidth指定線的粗細(xì)

plt.plot(x, y, "b-", linewidth=2.0) 

使用marker參數(shù)給線加標(biāo)記符號(hào)
plt.plot(x,y, color = "blue", marker = ".")
設(shè)定xy軸的區(qū)間
plt.axis([0, 5, -1.1, 1.1])
等價(jià)于plt.xlim(0,5) 加上 plt.ylim(-1.1, 1.1)
顯示網(wǎng)格
plt.grid(True)
加上文字描述
plt.text(3.1, 0.3, 'sin functoin')

在同一個(gè)坐標(biāo)系位置多個(gè)圖
各個(gè)圖使用逗號(hào)隔開
下面這個(gè)例子展示了缆镣,不同選項(xiàng)對(duì)圖形產(chǎn)生的不同效果

t = np.arange(0., 5., 0.2)dzb
在[0,5]的區(qū)間上分別繪制了 y=x, y=x^2, 和y=x^3 
"r"表示red紅色,“--”表示虛線试浙,
“b”表示blue藍(lán)色董瞻,“s”表示square正方形,
“g”表示green綠色田巴,“^”表示三角形
plt.plot(t, t, 'r--', t, t**2, 'bs', t, t**3, 'g^')

穿插DataFrame方法

sort_values排序方法钠糊,by參數(shù)指定根據(jù)哪個(gè)屬性排序
top10 = df.groupby('name')['ext price'].agg(['sum', 'count']).reset_index().sort_values(by='sum', ascending=False)[:10]
rename方法,可以對(duì)變量重新命名 inplace = True表示對(duì)源數(shù)據(jù)進(jìn)行修改
top10.rename(columns={'name': 'Name', 'sum': 'Sales', 'count': 'Purchases'}, inplace=True)

繪制條形圖plt.bar

繪圖風(fēng)格設(shè)置

# 使用ggplot風(fēng)格的作圖
plt.style.use('ggplot')
# 使用available屬性查看可用的風(fēng)格
plt.style.available

繪制條形圖的核心方法

plt.barh 繪制水平方向的條形圖壹哺,
plt.bar繪制垂直方向的直方圖
plt.barh(np.arange(10), top10.Sales, height=0.5)

使用 ticks修改坐標(biāo)的刻度 將數(shù)字改為有意義的字符串

plt.yticks(np.arange(10), top10.Name)
plt.xticks([0, 20000, 40000, 60000, 80000, 100000, 120000, 140000], 
           ['$0k', '$20k', '$40k', '$60k', '$80k', '$100k', '$120k', '$140k'])

繪制多圖fig.add_subplot

在同一幅圖中抄伍,分別繪制圖,不共用坐標(biāo)系管宵。

  1. 設(shè)置畫布大小plt.figure(figsize= 并返回畫布對(duì)象
    fig = plt.figure(figsize=(12,5))
  2. 給畫圖加上標(biāo)題, fontsize=14 字體大小, fontweight='bold' 加粗
    fig.suptitle('Sales Analysis', fontsize=14, fontweight='bold')
  3. 添加第一個(gè)子圖fig.add_subplot() 其中121表示 1行2列第一個(gè)圖
    ax1 = fig.add_subplot(121) #會(huì)返回這個(gè)子圖
    添加之后 默認(rèn)后續(xù)操作都是在子圖上進(jìn)行的
plt.barh(np.arange(10), top10.Sales, height=0.5, tick_label=top10.Name)
plt.title('Revenue')
# 加入平均銷售額截珍,用一條垂直的虛線表示
revenue_average = top10.Sales.mean()
plt.axvline(x=revenue_average, color='b', linestyle='--', linewidth=1)

axvline 繪制垂直線 參數(shù)x表示在x軸上的位置攀甚,

  1. 添加第二個(gè)圖
ax2 = fig.add_subplot(122) #表示1行2列第二個(gè)圖
plt.barh(np.arange(10), top10.Purchases, height=0.5)
plt.title('Units')
# 不顯示y軸刻度
plt.yticks(visible=False)

# 加入平均交易個(gè)數(shù),用一條垂直的虛線表示
purchases_average = top10.Purchases.mean()
plt.axvline(x=purchases_average, color='b', linestyle='--', linewidth=1)

plt.show()

餅圖plt.pie

不需要xy軸岗喉,繪制的數(shù)據(jù)秋度,標(biāo)簽名,autopct自動(dòng)顯示百分比

# pie繪制餅圖钱床,labels設(shè)置每個(gè)區(qū)域的標(biāo)簽名荚斯,autopct 顯示所占比例
plt.pie(top10.Sales, labels=top10.Name, autopct='%1.1f%%')
# 調(diào)整軸的比例
plt.axis('equal')
plt.show()

散點(diǎn)圖plt.scatter

scatter 繪制散點(diǎn)圖,x,y設(shè)置x軸和y軸對(duì)應(yīng)的數(shù)據(jù)诞丽,s設(shè)置點(diǎn)的大小
plt.scatter(x=top10.Purchases, y=top10.Sales, s=50)

直方圖plt.hist

hist繪制直方圖鲸拥,bins設(shè)置區(qū)間個(gè)數(shù) rwidth表示每個(gè)條的寬度 默認(rèn)為1
plt.hist(df['ext price'], bins=20, rwidth=0.9)

設(shè)置x軸區(qū)間范圍

plt.xlim(-200, 5000)

Python數(shù)據(jù)可視化模塊—Seaborn

  • Seaborn是基于matplotlib產(chǎn)生的一個(gè)模塊,專攻于統(tǒng)計(jì)可視化
  • 可以和pandas進(jìn)行無縫鏈接僧免,初學(xué)者使用Seaborn更容易上手
  • Seaborn和matplotlib的關(guān)系類似于pandas和numpy的關(guān)系。
# 導(dǎo)入seaborn包捏浊, 簡寫成sns
import seaborn as sn

使用sns作圖

sns通用繪圖

sns.FacetGrid().map()
facetGrid對(duì)應(yīng)的是數(shù)據(jù)懂衩,map將前面的數(shù)據(jù)映射成圖表。 這是比較通用的做法金踪。
使用seaborn做圖浊洞, 用品種劃分?jǐn)?shù)據(jù)
FacetGrid對(duì)象是用來連接pandas DataFrame到一個(gè)有著特別結(jié)構(gòu)的matplotlib圖像
具體來說,F(xiàn)acetGrid是用來畫一組固定的關(guān)系給定某個(gè)變量的某個(gè)值
FacetGrid中的hue參數(shù)指明劃分?jǐn)?shù)據(jù)的變量胡岔,這里是species(品種)

sns.FacetGrid(iris, hue="species", size=8) \
   .map(plt.scatter, "petal_length", "petal_width").add_legend()

sns繪制直方圖

col='Survived'指定將圖片在一行中做出生還和罹難與年齡的關(guān)系圖

sns.FacetGrid(titanic_df, col='Survived').
map(plt.hist, 'Age', bins=20, normed=True)

sns繪制箱圖

sns.boxplot()
sns.boxplot(data=iris, x="species", y="sepal_width")

sns各個(gè)變量之間的關(guān)系圖

sns.pairplot()
sns.pairplot(iris, hue="species")

sns繪制條形圖

sns.barplot(data=titanic_df, x='Pclass', y='Survived', hue='Sex', ci=None)

其中ci=None表示不顯示置信區(qū)間

繪制折線圖:使用sns.pointplot

sns.pointplot(data=titanic_df, x='Pclass', y='Survived', hue='Sex', ci=None)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末法希,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子靶瘸,更是在濱河造成了極大的恐慌苫亦,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,013評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件怨咪,死亡現(xiàn)場(chǎng)離奇詭異屋剑,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)诗眨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門唉匾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人匠楚,你說我怎么就攤上這事巍膘。” “怎么了芋簿?”我有些...
    開封第一講書人閱讀 152,370評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵峡懈,是天一觀的道長。 經(jīng)常有香客問我益咬,道長逮诲,這世上最難降的妖魔是什么帜平? 我笑而不...
    開封第一講書人閱讀 55,168評(píng)論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮梅鹦,結(jié)果婚禮上裆甩,老公的妹妹穿的比我還像新娘。我一直安慰自己齐唆,他們只是感情好嗤栓,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,153評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著箍邮,像睡著了一般茉帅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上锭弊,一...
    開封第一講書人閱讀 48,954評(píng)論 1 283
  • 那天堪澎,我揣著相機(jī)與錄音,去河邊找鬼味滞。 笑死樱蛤,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的剑鞍。 我是一名探鬼主播昨凡,決...
    沈念sama閱讀 38,271評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼蚁署!你這毒婦竟也來了便脊?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,916評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤光戈,失蹤者是張志新(化名)和其女友劉穎哪痰,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體田度,經(jīng)...
    沈念sama閱讀 43,382評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡妒御,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,877評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了镇饺。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片乎莉。...
    茶點(diǎn)故事閱讀 37,989評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖奸笤,靈堂內(nèi)的尸體忽然破棺而出惋啃,到底是詐尸還是另有隱情,我是刑警寧澤监右,帶...
    沈念sama閱讀 33,624評(píng)論 4 322
  • 正文 年R本政府宣布边灭,位于F島的核電站,受9級(jí)特大地震影響健盒,放射性物質(zhì)發(fā)生泄漏绒瘦。R本人自食惡果不足惜称簿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,209評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望惰帽。 院中可真熱鬧憨降,春花似錦、人聲如沸该酗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,199評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽呜魄。三九已至悔叽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間爵嗅,已是汗流浹背娇澎。 一陣腳步聲響...
    開封第一講書人閱讀 31,418評(píng)論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留睹晒,地道東北人九火。 一個(gè)月前我還...
    沈念sama閱讀 45,401評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像册招,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子勒极,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,700評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 提升你的洞察的最好方法之一是通過可視化你的數(shù)據(jù):這樣是掰,你可以更容易地識(shí)別模式,掌握到困難的概念以及注意到關(guān)鍵的要素...
    段書勇閱讀 38,055評(píng)論 1 37
  • [鏈接] 01. matplotlib API入門 02. Pandas中的繪圖函數(shù) 03. 繪制地圖:圖形化顯示...
    進(jìn)步小小青年閱讀 2,909評(píng)論 0 2
  • 第十五章 生成數(shù)據(jù) matplotlib數(shù)學(xué)繪圖庫 pygal專注生成適合在數(shù)字設(shè)備上顯示的圖表 15.1 繪制折...
    Shinichi新一君閱讀 1,018評(píng)論 0 0
  • 重點(diǎn)辱匿,主次分明键痛。 正五行為先為重。喝形為后匾七。 正五行為主絮短,先通過。喝形為輔昨忆。 風(fēng)水取舍主次丁频。 無非注重于,水吉邑贴,山...
    東風(fēng)蟄閱讀 266評(píng)論 0 0
  • 昨天幾個(gè)瘋女人心血來潮拢驾,大半夜的跑去唱歌奖磁。 好久沒有發(fā)泄發(fā)泄了,六個(gè)女的在大包房里不顧一切的輪流嘶吼繁疤。 一首離歌咖为,...
    蔡清荷閱讀 276評(píng)論 0 0