文科生學(xué)Python系列13: matplotlib繪圖/條形圖

第七課 - 數(shù)據(jù)可視化

本課內(nèi)容:

matplotlib 繪圖基礎(chǔ)

? ? ? 函數(shù)曲線的繪制

? ? ? 圖形細(xì)節(jié)的設(shè)置

案例分析:銷售記錄可視化

? ? ? 條形圖

? ? ?繪制多圖

?? ? 餅圖

? ? ?散點(diǎn)圖

? ? ?直方圖

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

? ? ?分類數(shù)據(jù)的散點(diǎn)圖

? ? ?分類數(shù)據(jù)的箱線圖

? ? ?多變量圖

回顧:在之前課程中, 我們已經(jīng)接觸到了數(shù)據(jù)可視化

在第五節(jié)課中疯搅,我們通過(guò)pandas的plot函數(shù)對(duì)鶯尾花數(shù)據(jù)進(jìn)行了可視化。我們繪制了根據(jù)品種分類的散點(diǎn)圖和箱線圖。

在第六節(jié)課中,我們使用matplotlib繪制了姓名變化趨勢(shì)圖痕支,并通過(guò)plt的各種選項(xiàng)對(duì)圖形進(jìn)行了美化锅睛。

上述例子中可視化都是基于matplotlib來(lái)展開(kāi)的,在本次課程中我們將詳細(xì)演示如何使用matplotlib

matplotlib 是Python編程語(yǔ)言的一個(gè)繪圖庫(kù)随闺,最初由John D. Hunter撰寫(xiě)。

與Python的深度集成

風(fēng)格與Matlab接近

官網(wǎng):http://matplotlib.org/

matplotlib例圖


老師說(shuō)景馁,我們?yōu)槭裁唇裉煲闲碌?matplotlib 的繪圖呢板壮,因?yàn)橹皩W(xué)的鳶尾花散點(diǎn)圖用的是Pandas里面自帶的plot圖,在分類數(shù)據(jù)的分析上合住,之前學(xué)的方法顯得冗余了绰精。為了更好的可視化,不冗余透葛!我們來(lái)學(xué)新的笨使!

matplotlib 繪圖基礎(chǔ)

導(dǎo)入數(shù)據(jù)包,設(shè)置基礎(chǔ)

以上還是一樣設(shè)置基礎(chǔ)數(shù)據(jù)僚害,每一次都要導(dǎo)入的numpy和 pandas包硫椰,不導(dǎo)入后面會(huì)跟你說(shuō)沒(méi)有定義,識(shí)別不了的哦~ 設(shè)置圖形的格式是 retina 的清晰度萨蚕。運(yùn)行之后靶草,我們來(lái)正式繪圖吧!

在matplotlib 中岳遥,繪制一個(gè)曲線圖奕翔,可以使用plt.plot這個(gè)函數(shù),在正弦函數(shù)中浩蓉,主要的是x和y軸兩個(gè)軸的數(shù)據(jù)派继。所以我們需要先設(shè)置x 和 y 。

我們用numpy中的arange函數(shù)捻艳,設(shè)置的是從0到5驾窟,間隔為0.1之間的數(shù)據(jù)。專業(yè)點(diǎn)來(lái)講认轨,0.1好像叫步長(zhǎng)绅络。當(dāng)時(shí)上課這個(gè)語(yǔ)句一晃而過(guò),我沒(méi)看懂是什么為什么括號(hào)里面有三個(gè)數(shù)字,回放聽(tīng)終于明白了恩急。节视。。明明是學(xué)過(guò)的啊??????

x, y=sin(x)

突然覺(jué)得假栓,中學(xué)時(shí)代不會(huì)Python真可惜,或許時(shí)不時(shí)用它來(lái)解決數(shù)學(xué)問(wèn)題霍掺,數(shù)學(xué)成績(jī)就沒(méi)那么差了匾荆。周三上課的時(shí)候余老師一講到正弦函數(shù)我就有點(diǎn)頭大,幸好不是要我計(jì)算呀杆烁!

plt.plot(x,y)

看到這里才發(fā)現(xiàn)牙丽,x 和y 用的都是 np 的函數(shù),在np里面定義賦值兔魂。為什么不是pandas呢烤芦?

老師說(shuō)因?yàn)槲覀兦懊嬖O(shè)置過(guò)自動(dòng)顯示圖片(終于明白第一張圖的 “%matplotlib Inline” 的作用了。析校。构罗。),所以這里直接輸入語(yǔ)句智玻,按輸出遂唧,就可以看到結(jié)果了。我們也可以設(shè)置成手動(dòng)顯示圖片吊奢,看下圖:

手動(dòng)顯示圖片

plt.show( ) 這個(gè)語(yǔ)句盖彭,設(shè)置手動(dòng)顯示圖片,而且這里沒(méi)有 OUT這個(gè)顯示了页滚。其實(shí)這個(gè)我不知道有什么用召边。

接下來(lái)又是(我不懂的)美化啦!

增加 color='g',marker='.',linewidth=2

把函數(shù)線的顏色設(shè)置成綠色裹驰,上課的時(shí)候我說(shuō)為什么它知道g就是綠色八砦酢!老師說(shuō)用的 green 比 grey 多邦马,所以系統(tǒng)會(huì)默認(rèn) g 是 green贱鼻。上課講的時(shí)候可沒(méi)有color=g 啊,老師用的是簡(jiǎn)寫(xiě)滋将,直接在 plt.plot(x,y) 中的右邊括號(hào)里面加上逗號(hào)和 'g . -' 邻悬,然后就是綠色?點(diǎn)線條了。

現(xiàn)在看到的圖兩軸還是有些是空白随闽,所以需要美化父丰,縮減空白,這里用的是我們第六課用的方法:

xlim,.ylim

plt.xlim(0,5) 和 plt.ylim(-1.1,1.1) 的使用可以讓區(qū)間空白改變一點(diǎn)蛾扇,這次老師教了一種新的方法:

plt.axis([0,5,-1.1,1.1])

plt.axis([0,5,-1.1,1.1]) 攘烛,和上節(jié)課的xlim, ylim 使用結(jié)果一樣,這個(gè)語(yǔ)句更短镀首,先定義 x 軸的范圍從0到5坟漱,再定義 y 軸的范圍,所以在圓括號(hào)里面更哄,有一個(gè)方括號(hào)芋齿,包著四個(gè)數(shù)字,分別表示兩個(gè)軸的范圍成翩。

要是我們需要清晰看到一個(gè)點(diǎn)所在的橫縱坐標(biāo)觅捆,需要用網(wǎng)格線進(jìn)行更精確的定位,在那個(gè)點(diǎn)標(biāo)明文字:

plt.grid(True)

plt.grid(True) 指的是網(wǎng)格線存在哦麻敌。

plt.text(3.1,0.3,'sin(x)') ?栅炒,指的是在坐標(biāo)(3.1,0.3)的位置上加上文字說(shuō)明 sin(x)术羔。

回顧例一赢赊,用plot 函數(shù)得到一個(gè)基本的曲線函數(shù),然后用各種細(xì)節(jié)設(shè)置聂示,讓整個(gè)圖變得更加飽滿域携,包括標(biāo)題/橫軸/縱軸/網(wǎng)格/文本等設(shè)置,這樣的方法稱為函數(shù)式的編程鱼喉,這是模仿matlib的作圖方式秀鞭。與之相對(duì)應(yīng)的還有面向?qū)ο蟮淖鲌D,它對(duì)細(xì)節(jié)的控制會(huì)更加豐富扛禽,但對(duì)初學(xué)者的掌握能力來(lái)說(shuō)锋边,學(xué)會(huì)函數(shù)式的編程比較適時(shí)。


例2:繪制 y=x, y=x^2, y=x^3 三個(gè)函數(shù)的曲線

y=x, y=x^2, y=x^3

我在看預(yù)習(xí)資料的時(shí)候编曼,看不到運(yùn)行出來(lái)的圖豆巨,plt.plot(x,x,x,x**2,x,x**3) ,這一句看起來(lái)太復(fù)雜有點(diǎn)可怕掐场,然而它的意思竟然是往扔,里面的6個(gè)數(shù)字分為三對(duì)xy軸的數(shù)。三個(gè)函數(shù)的x 和 y 竟然可以全部擠在一起熊户,厲害了萍膛。

要是想要更好的區(qū)分這三個(gè)函數(shù)曲線,可以用一些設(shè)置將它們變得更有辨識(shí)度:

plt.plot(x,x,'r--',x,x**2,'bs',x,x**3,'g^')

上課看老師運(yùn)行這一步的時(shí)候嚷堡,驚呆了蝗罗。這里就是上面提到過(guò)的簡(jiǎn)寫(xiě)了,具體代表什么,# 后面已經(jīng)說(shuō)明了串塑。接下來(lái)還是繼續(xù)美化顯示的圖片了沼琉,大家可以自己做一下啦!這里不展示了桩匪。

小結(jié):

上述代碼展示了matplotlib的一些基本功能打瘪,我們可以通過(guò)使用plt自帶的各種函數(shù)來(lái)控制圖形的細(xì)節(jié),比如是否加網(wǎng)格傻昙,坐標(biāo)的標(biāo)簽等等瑟慈。

我們?cè)诤罄m(xù)課程中還會(huì)向大家展示其他常用圖形

案例分析:銷售記錄可視化

導(dǎo)入并觀察數(shù)據(jù)

每次看到數(shù)據(jù)導(dǎo)入我就特別害怕,因?yàn)槊看味紩?huì)卡我很久屋匕,久到我會(huì)想“要不這文章就這樣吧,老子不寫(xiě)了借杰」牵” 每一次的坑我都記得非常清楚,紅酒質(zhì)量的蔗衡,鳶尾花的纤虽,全美嬰兒姓名的,這次是銷售數(shù)據(jù)绞惦。

這次卡了多久逼纸?

一小時(shí)30分鐘。

讀取數(shù)據(jù)失敗的我济蝉,拿起等了我3個(gè)小時(shí)三明治杰刽,一邊吃一邊苦悶地想,這樣的事情真是太丟人了啊王滤,同一個(gè)坑贺嫂,掉第四次。吃完這次終于上網(wǎng)查怎么在jupyter導(dǎo)入excel數(shù)據(jù)了(以前我都在干嘛雁乡?5谠)但是并沒(méi)有查到要的答案,終于在我們課程的討論區(qū)踱稍,看到一個(gè)同學(xué)回復(fù)的答案曲饱!老淚縱橫!V樵隆扩淀!

怎么導(dǎo)入數(shù)據(jù)到j(luò)upyter

試了一下,上載成功的文件在jupyter打開(kāi)是一片空白桥温,而且把這個(gè)空白的文件下載到電腦了引矩,我以為操作出了問(wèn)題,試了幾次,一模一樣旺韭。把代碼敲進(jìn)去試著運(yùn)行氛谜,竟然!成功運(yùn)行了区端。值漫。。詭異织盼!

讀取excel數(shù)據(jù)文件

這是一份一家公司在某個(gè)時(shí)間段段交易數(shù)據(jù)杨何。行首對(duì)應(yīng)的分別是客戶賬號(hào)/公司名稱/商品貨號(hào)/每次交易的購(gòu)貨量/每個(gè)商品的交易價(jià)格/交易總額/交易時(shí)間。

要是你是一個(gè)數(shù)據(jù)分析師沥邻,想要在這份數(shù)據(jù)里面得到一些信息危虱,你會(huì)從哪方面著手呢?

我們可以用之前學(xué)過(guò)的一些函數(shù)進(jìn)行對(duì)整份數(shù)據(jù)進(jìn)行分析:

df.info()

這是一份有1500條信息的數(shù)據(jù)唐全,沒(méi)有缺失值埃跷。

查看與之交易的公司數(shù)量

要是需要看與之交易的公司有哪些,可以把上面運(yùn)行語(yǔ)句的 len( ) 去除掉邮利。

要是需要看某家公司的交易量弥雹,也是可以用函數(shù)進(jìn)行輸出的:

Barton LLC交易量(1)
Barton LLC交易量(2)

這個(gè)輸出比較長(zhǎng),分兩張展示首尾延届,最后一行可以看出剪勿,一共82筆交易。

銷售額最高的10個(gè)公司

交易總額和交易次數(shù)的輸出

先用語(yǔ)句求出我們要的數(shù)方庭。套路都是我們之前學(xué)過(guò)的:用groupby分組厕吉,也就是找到交易量的公司,先圈出范圍“name”械念,然后是“ext price” 赴涵。然后使用agg進(jìn)行聚合運(yùn)算:sum求交易總額,count計(jì)算交易次數(shù)订讼。

但是在上面我們可以看到髓窜,行首的格式不是很對(duì),這里需要調(diào)整一下:

reset_index 重置索引

這里在前面一行加了 ' \ '這樣的符號(hào)欺殿,老師說(shuō)這樣加上去可以讓它換行寄纵,看了結(jié)果,應(yīng)該是讓name 這個(gè)詞在行首回到了好看的位置脖苏。reset_index 重置索引程拭,里面寫(xiě)的 “在這里取消了name作為索引”,我沒(méi)理解明白棍潘,也就是前面是用name來(lái)索引的恃鞋?用name來(lái)索引和這一步的操作崖媚,作為索引來(lái)說(shuō),有什么不同恤浪?

這時(shí)候我們已經(jīng)得到銷售總額的數(shù)據(jù)了畅哑,但是我們的題目是需要銷售總額前十的,所以我們需要對(duì)銷售總額進(jìn)行排序水由。

sort_values進(jìn)行排序

這里學(xué)到一個(gè)新的函數(shù)了荠呐,用 sort_values 進(jìn)行排序。

好吧砂客,前十還沒(méi)出來(lái):

top10

這一步加了挺多東西上去的泥张。重新再句首賦值 top10,后面輸出 top10鞠值。在第27條輸出了排前的銷售額媚创,才能直接在這一步的第二行代碼最后直接使用切片的方式 [:10] 來(lái)運(yùn)算。

然后是對(duì)行首名稱對(duì)修改彤恶,把首字母都大寫(xiě)了筝野,替換的方式是使用字典的鍵值對(duì),格式是 {之前的值:替換上的值} 粤剧,老師運(yùn)行的第一遍沒(méi)有加上inplace=true,結(jié)果就是并沒(méi)有修改成功挥唠,然后解釋抵恋,因?yàn)閞ename那一行算是里面默認(rèn)的副本,要是沒(méi)有inplace=true 宝磨,那是運(yùn)行不成功的弧关。

我們總算把銷售額前十的公司輸出來(lái)了!

條形圖

top10公司銷售總額的條形圖

plt.barh(np.arange(10),top10.Sales,height=0.5)

新的圖唤锉!之前我們學(xué)過(guò)有scatter散點(diǎn)圖世囊,plot折線圖,還有啥來(lái)著窿祥?今天的直方圖是bar株憾,哦,垂直的是bar晒衩,水平方向的直方圖是barh嗤瞎。

所有的代碼,其實(shí)都能看懂听系。但是要我自己不偷看打出來(lái)贝奇,真的是。靠胜。掉瞳。心虛毕源。

添加標(biāo)題和橫縱坐標(biāo)的說(shuō)明。并且陕习,為了讓圖看起來(lái)更加知道相對(duì)應(yīng)的值是什么霎褐,我們修改了坐標(biāo)的刻度:

plt.yticks(np.arange(10),top10.Name)

覺(jué)得單看這個(gè)圖好專業(yè)啊衡查!這時(shí)候余老師講了上課的第二個(gè)“冗余”瘩欺,就是圖和代碼之間那串黑體字。這時(shí)候終于能夠確切理解 冗余 這個(gè)詞的表達(dá)力拌牲!要是不想看到這些多余的字俱饿,我們可以這樣做:

plt.show()

有一種,把多余的毛發(fā)剃掉的感覺(jué)一樣八觥E牟骸!M辆印T婀骸!清爽擦耀!

然餓棉圈,老師這時(shí)候又去改X軸坐標(biāo)了:

plt.xticks

其實(shí)這一段不是很明白,替換掉的值眷蜓,不像上面用字典來(lái)替換分瘾,用的是兩個(gè)列表,后面一個(gè)列表里面的元素還是字符串吁系。這是我們之前學(xué)過(guò)的德召??疑惑汽纤。

這個(gè)圖的風(fēng)格是默認(rèn)的風(fēng)格上岗,老師說(shuō)可以讓我們嘗試一下其他風(fēng)格,選擇之前看看有哪些是可以被選擇的蕴坪。這樣的東西竟然都有語(yǔ)法肴掷,太可怕了!1炒捆等!

plt.style.available

然后老師選了 ggplot,據(jù)說(shuō)是 “愛(ài)原冢(音譯)”的風(fēng)格续室,來(lái)看看吧

plt.style.use('ggplot')

默認(rèn)顏色變了栋烤,而且還有底版了:淺灰色+網(wǎng)格。


作業(yè)7-1:

模仿上面的例子挺狰,畫(huà)出交易總數(shù)最高的10個(gè)公司的條形圖明郭。

提示:可以使用sort_values(by= quantity) 來(lái)實(shí)現(xiàn)买窟。



啊啊啊,血槽空了薯定,我去補(bǔ)補(bǔ)血始绍,剩下這兩天盡快更新!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末话侄,一起剝皮案震驚了整個(gè)濱河市亏推,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌年堆,老刑警劉巖吞杭,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異变丧,居然都是意外死亡芽狗,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)痒蓬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)童擎,“玉大人,你說(shuō)我怎么就攤上這事攻晒」烁矗” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵鲁捏,是天一觀的道長(zhǎng)芯砸。 經(jīng)常有香客問(wèn)我,道長(zhǎng)碴萧,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任末购,我火速辦了婚禮破喻,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘盟榴。我一直安慰自己曹质,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布擎场。 她就那樣靜靜地躺著羽德,像睡著了一般。 火紅的嫁衣襯著肌膚如雪迅办。 梳的紋絲不亂的頭發(fā)上宅静,一...
    開(kāi)封第一講書(shū)人閱讀 51,165評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音站欺,去河邊找鬼姨夹。 笑死纤垂,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的磷账。 我是一名探鬼主播峭沦,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼逃糟!你這毒婦竟也來(lái)了吼鱼?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤绰咽,失蹤者是張志新(化名)和其女友劉穎菇肃,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體剃诅,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡巷送,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了矛辕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片笑跛。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖聊品,靈堂內(nèi)的尸體忽然破棺而出飞蹂,到底是詐尸還是另有隱情,我是刑警寧澤翻屈,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布陈哑,位于F島的核電站,受9級(jí)特大地震影響伸眶,放射性物質(zhì)發(fā)生泄漏惊窖。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一厘贼、第九天 我趴在偏房一處隱蔽的房頂上張望界酒。 院中可真熱鬧,春花似錦嘴秸、人聲如沸毁欣。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)凭疮。三九已至,卻和暖如春串述,著一層夾襖步出監(jiān)牢的瞬間执解,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工纲酗, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留材鹦,地道東北人逝淹。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像桶唐,于是被迫代替她去往敵國(guó)和親栅葡。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

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