天天看點

python資料可視化(matplotlib)資料可視化matplotlib圖形繪制圖形類型Series與DataFrame圖形繪制

資料可視化

基本概念

資料可視化是指借助于圖形化的手段,清晰、快捷有效的傳達與溝通資訊。同時,也可以輔助使用者做出相應的判斷,更好的去洞悉資料背後的價值。

字不如表,表不如圖。

觀察号碼的頻率,每個号碼出現了多少次?

文字

08 10 15 20 30 31 33 06

01 09 10 17 21 28 32 13

02 05 08 13 19 21 28 10

03 05 07 14 18 23 25 07

…… ……

表格

python資料可視化(matplotlib)資料可視化matplotlib圖形繪制圖形類型Series與DataFrame圖形繪制

圖形

通過可視化圖表方式,就可以清晰的表達資訊

python資料可視化(matplotlib)資料可視化matplotlib圖形繪制圖形類型Series與DataFrame圖形繪制

可視化圖形輔助決策

1854 年英國倫敦霍亂病流行時,斯諾博士在繪有霍亂流行地區所有道路、房屋、飲用水機井等内容的城區地圖上,标出了每個霍亂病死者的住家位置,得到了霍亂病死者居住位置分布圖,發現了霍亂病源之所在:布勞德大街(現布勞維克大街)的公用抽水機

python資料可視化(matplotlib)資料可視化matplotlib圖形繪制圖形類型Series與DataFrame圖形繪制

matplotlib

matplotlib是用于Python的繪圖庫,提供各種常用圖形的繪制。例如,條形圖,柱形圖,線圖,散點圖等。

import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd      

圖形繪制

繪制線圖

可以通過matplotlib.pyplot的plot方法進行圖形繪制。

  • plot(y)
  • plot(y, '格式')
  • plot(x, y)
  • plot(x, y, '格式')
  • plot(x1, y1, '格式1', x2, y2, '格式2' …… xn, yn, 格式n)
# 繪制一個點,點預設情況下是不顯示的。如果需要讓點能夠顯示,需要設定(marker參數可以設定點顯示的形狀)。
# plt.plot(50, marker="d")

# 繪制多個資料,構成線型形狀。如果我們隻提供一組數組,則該組資料表示縱坐标,橫坐标預設從0開始,1,2,3,4進行排列。
# plt.plot([3, 2, 9, 15, -3], marker="o")

# 我們也可以自己來指定橫坐标。提供兩組資料。第1個清單指定橫坐标,第2個清單指定縱坐标。
# plt.plot([-3, -1, 5, 8, 12], [2, -10, 9, 3, 6], marker="o")

# 我們在繪制圖形的時候,可以指定點的形狀,線的形狀,線條顔色等設定。
# plt.plot([-3, -1, 5, 8, 12], [2, -10, 9, 3, 6], "y-.>")

# 繪制多個資料,每個資料給予不同的格式。
# plt.plot([-3, -9], [32, 18], "r--D", [5, 8], [-10, 20], "g-.o")

# 以上的方式,我們也可以分成兩步來進行繪制。
plt.plot([-3, -9], [32, 18], "r--D")
plt.plot([5, 8], [-10, 20], "g-.o")      
[<matplotlib.lines.Line2D at 0x1c986a6d080>]      
python資料可視化(matplotlib)資料可視化matplotlib圖形繪制圖形類型Series與DataFrame圖形繪制

圖形互動式設定

我們可以設定jupyter notebook圖形是否互動式顯示,預設為否。

  • %matplotlib 引擎名
  • %matplotlib inline
# %matplotlib qt
%matplotlib inline
plt.plot([5, 8], [-10, 20], "g-.o")      
[<matplotlib.lines.Line2D at 0x20f80f3e0b8>]      
python資料可視化(matplotlib)資料可視化matplotlib圖形繪制圖形類型Series與DataFrame圖形繪制

設定中文支援

matplotlib預設情況下不支援中文顯示,如果需要顯示中文,則我們需要做一些額外的設定操作。設定可以分為:

  • 全局設定
  • 局部設定

全局設定

我們可以通過執行:

mpl.rcParams["font.family"] = "中文字型名稱"

mpl.rcParams["axes.unicode_minus"]=False

進行設定。常用的設定如下:

  • font.family 字型的名稱
    • sans-serif 西文字型(預設)
    • SimHei 中文黑體
    • FangSong 中文仿宋
    • YouYuan 中文幼圓
    • STSong 華文宋體
    • Kaiti 中文楷體
    • LiSu 中文隸書
  • font.style 字型的風格
    • normal 正常(預設)
    • italic 斜體
    • oblique 傾斜
  • font.size 字型的大小(預設10)
  • axes.unicode_minus 是否使用Unicode的減号(負号)【在支援中文顯示狀态下,需要設定為False】

局部設定

在需要顯式的文字中,使用fontproperties參數進行設定。

說明:

  • 如果全局設定與局部設定沖突,以局部設定為準。
# 對字型進行設定。預設的字型不支援中文顯示,我們隻需設定一種支援中文顯示的字型即可。
mpl.rcParams["font.family"] = "Kaiti"
# 對于西方文字,使用普通的負号來顯示,無需設定該選項。當設定支援中文的字型時,會使用Uniocde的負号來進行顯示(不支援)。故需要将
# 負号顯示成普通的形式,而不是使用Unicdoe的負号顯示。
mpl.rcParams["axes.unicode_minus"] = False
mpl.rcParams["font.style"] = "normal"
mpl.rcParams["font.size"] = 10
plt.plot([-3, -2],[-1, -5], "r--")
# 顯示标題
plt.title("中文")

# 局部設定
plt.title("中文", fontproperties="Kaiti", fontsize=20)      
Text(0.5, 1.0, '中文')      
python資料可視化(matplotlib)資料可視化matplotlib圖形繪制圖形類型Series與DataFrame圖形繪制

儲存圖表

通過plt的savefig方法将目前的圖形儲存到硬碟或者類檔案對象中。

  • dpi:每英寸分辨率點數。
  • facecolor:設定圖像的背景色。
  • bbox_inches:設定為tight,可以緊湊儲存圖像。
  • # savefig圖表儲存
    # 1 儲存到硬碟上
    plt.plot([1, 5, 8, 10], [2, 3, 9, 6], "r-.o")
    
    plt.savefig("./1.png", dpi=100, facecolor="g", bbox_inches="tight")
    
    # 2 儲存到類檔案對象中
    
    # from io import BytesIO
    # data = BytesIO()
    # plt.savefig(data)
    
    # data.read()
    # data.getvalue()[:100]
    
    from PIL import Image
    # 從硬碟讀取檔案
    image = Image.open("./1.png")
    
    # 從類檔案對象中讀取資訊
    # image = Image.open(data)
    image.show()      
    python資料可視化(matplotlib)資料可視化matplotlib圖形繪制圖形類型Series與DataFrame圖形繪制

顔色,點标記與線型設定

我們可以在繪制圖形時,顯式指定圖形的顔色,點标記或線條形狀。具體設定可以檢視幫助文檔。

  • color(c):線條顔色。
  • linestyle(ls):線條形狀。
  • linewidth(lw):線寬。
  • marker:點标記形狀。
  • markersize(ms):點标記的大小。
  • markeredgecolor(mec):點邊緣顔色。
  • markeredgewidth(mew):點邊緣寬度。
  • markerfacecolor(mfc):點的顔色。

說明:

  • 顔色,點标記與線型可以使用一個參數進行設定。
  • 顔色除了可以使用預設簡寫的字元之外,也可以使用全稱(例如red)也可以使用RGB顔色表示。
# plt.plot([1, 2, 3, 4], [5, 6, 7, 8], "ro--")
plt.plot([1, 2, 3, 4], [5, 6, 7, 8], c="r", ls="--", lw=2, marker="o", ms=15, mec="r", mew=5, mfc="y")      
[<matplotlib.lines.Line2D at 0x1c986f302b0>]      
python資料可視化(matplotlib)資料可視化matplotlib圖形繪制圖形類型Series與DataFrame圖形繪制

透明度設定

在繪制圖像時,我們可以通過alpha參數來控制圖像的透明度,值在0 ~ 1之間。0為完全透明,1為不透明。

plt.plot(np.arange(30), marker="D", alpha=0.7)      
[<matplotlib.lines.Line2D at 0x20f80f6ab00>]      
python資料可視化(matplotlib)資料可視化matplotlib圖形繪制圖形類型Series與DataFrame圖形繪制

圖例設定

在繪制多條線時,可以設定圖例來标注每條線所代表的含義,使圖形更加清晰易懂。

可以采用如下的方式設定圖例:

  • 調用plt的legend函數,傳遞一個标簽數組,指定每次plot圖形的标簽。
  • 在繪制的時候通過label參數指定圖例中顯示的名稱,然後調用legend函數生成圖例。

legend常用的參數:

  • loc:指定圖例的位置。預設為best。也可以指定坐标(元組),基于圖像左下角計算。
  • frameon:設定是否含有邊框。
  • title:設定圖例的标題。
  • ncol:圖例顯示的列數,預設為1。
# 可以采用兩種方式。
# plt.legend設定顯示圖例。

# 1 第一中方式,繪圖時不指定标簽,而在legend方法中指定标簽。
plt.plot(list(range(1, 13)), np.random.randint(50, 100, 12))
plt.plot(list(range(1, 13)), np.random.randint(50, 100, 12))
# loc 控制圖例的顯示位置,預設為best,即選擇一個最好的位置。
plt.legend(["2016", "2017"], loc="upper right")

# legend也可以指定元組的坐标。(坐标的值基于目前圖形的比例。)
# plt.legend(["2016", "2017"], loc=(0.6, 0.5))
# frameon是否顯示圖例的邊框,True(預設值)顯示,False不顯示。
# plt.legend(["2016", "2017"], loc="best", frameon=False)
# plt.legend(["2016", "2017"], loc="best", title="年降雨量", ncol=2)      
python資料可視化(matplotlib)資料可視化matplotlib圖形繪制圖形類型Series與DataFrame圖形繪制
# 2 第2種方式:在繪圖時指定标簽,在legend中不指定。
# 通過label參數指定标簽資訊。該資訊可以用來當做legend的圖例标簽。
plt.plot(list(range(1, 13)), np.random.randint(50, 100, 12), label="2016")
plt.plot(list(range(1, 13)), np.random.randint(50, 100, 12), label="2017")
plt.legend(loc="best")      
python資料可視化(matplotlib)資料可視化matplotlib圖形繪制圖形類型Series與DataFrame圖形繪制

網格設定

可以通過plt的grid方法來設定是否顯示網格。True為顯示,False不顯示。ax.grid(color='r', linestyle='-', linewidth=2)

  • color:設定網格線顔色
  • axis:設定網格線顯示x,y或者全部顯示(x,y,both)。
  • linestyle:設定網格線形狀。
  • linewidth:設定網格線寬度。
plt.plot([1, 2], [3, 4])
plt.grid(True, color="y", axis="y", ls="--", lw=5)      
python資料可視化(matplotlib)資料可視化matplotlib圖形繪制圖形類型Series與DataFrame圖形繪制

繪圖區域設定

我們可以在一張圖上繪制多個圖形,當然,我們也可以将不同的圖形繪制到多個不同的區域當中。

我們可以采用以下方式來實作多個區域的繪制(建立子繪圖區域):

  • 通過Figure對象調用add_subplot方法。
  • 通過plt的subplot方法。
  • 通過plt的subplots方法。

子區域1:add_subplot方法

  • 首先建立matplotlib.figure.Figure對象,然後通過Figure對象的add_subplot方法增加子繪圖區域。
  • add_subplot方法中,需要指定子區域的行數、列數與目前要繪制的子區域。
  • add_subplot方法會傳回子繪圖對象(軸對象),通過該對象即可實作繪圖(matplotlib.axes._subplots.AxesSubplot)。

在繪制圖形時,總是需要建立Figure對象。如果沒有顯式建立,則plt會隐式建立一個Figure對象。在繪制圖形時,既可以使用plt來繪制,也可以使用子繪圖對象來繪制。

如果使用plt對象繪制,則總是在最後建立的繪圖區域上進行繪制,如果此時尚未建立繪圖區域,則會自動建立。

說明:

  • add_subplot方法的參數,即可以使用三個參數分開傳遞,也可以使用一個參數整體傳遞。
  • 可以通過plt.subplots_adjust方法來調整子繪圖的位置與子繪圖之間的距離。(left, right, top, bottom, wspace, hspace)
  • 建立子區域時,可以使用facecolor設定繪圖區域的背景色。
# 建立Figure對象。在我們進行繪圖時,一定會存在Figure對象,如果我們沒有顯式建立,也會隐式建立。
figure = plt.figure()
# 建立一個子繪圖區域,分别指定行數(第1個參數),列數(第2個參數),目前的自繪圖區域(第3個參數)。
figure.add_subplot(1, 2, 1, facecolor="g")
plt.plot(10, marker="o")
# 三個參數也可以作為一個參數整體傳遞
figure.add_subplot("122")
# figure.add_subplot(1, 2, 2)
plt.plot(20, marker="d")

# 在調用add_subplot方法時,會傳回所建立的子繪圖區域對象。我們既可以通過plt.plot進行繪制,也可以通過子繪圖區域的plot方法
# 進行繪制。
# sub = figure.add_subplot(1, 2, 1)
# sub.plot([1, 2, 3], [5, 6, 8], "g")
# 當我們使用plt.plot進行繪制時,總是在最後激活(建立)的子繪圖區域上進行繪制。 
# sub2 = figure.add_subplot(1, 2, 2)
# plt.plot([3, 8, 9], [12, 9, 0], "y")

# 調整水準的間距。
plt.subplots_adjust(wspace=1)      
python資料可視化(matplotlib)資料可視化matplotlib圖形繪制圖形類型Series與DataFrame圖形繪制

子區域2:subplot方法

通過調用plt的subplot方法建立子繪圖區域,該方法傳回子繪圖對象。此處方式下,會隐式建立Figure對象。

實際上,這種建立子繪圖區域的方式,底層也是通過第一種方式實作的。

#subplot(行, 列, 目前位置)
plt.subplot(1, 2, 1)
plt.plot([3, 8, 3], "g--d")

plt.subplot(1, 2, 2)
plt.plot([3, 8, 9], "r-.o")      
python資料可視化(matplotlib)資料可視化matplotlib圖形繪制圖形類型Series與DataFrame圖形繪制

子區域3:subplots方法

通過plt的subplots方法建立子繪圖區域,該方法傳回一個元組(Figure對象與所有子繪圖對象,如果是多個子繪圖對象,則傳回一個ndarray數組)。可以通過sharex與sharey來指定是否共享x軸與y軸。

# 傳回元組, 第1個元素,Figure對象,第2個元素:子繪圖區域對象。
# 如果我們建立多個子繪圖區域對象,則多個子繪圖區域對象會存放在ndarray中。
figure, ax = plt.subplots(2, 2, sharex=True, sharey=True)

ax[0][0].plot([3, 9])
ax[0][1].plot([3, 9])
ax[1][0].plot([3, 9])
ax[1][1].plot([3, 9])      
python資料可視化(matplotlib)資料可視化matplotlib圖形繪制圖形類型Series與DataFrame圖形繪制

繪圖區域大小設定

如果繪圖子區域較多,可能會有些擁擠。此時,我們可以調整繪圖區域的大小。方式如下:

  • 在調用

    plt.figure()

    建立Figure對象時,通過figsize參數指定。機關為英寸。
  • 在建立Figure對象後,可以通過Figure對象的set_size_inches方法設定。

說明:

  • 如果沒有顯式建立Figure對象,可以通過plt的gcf函數擷取目前的Figure對象。
# 在建立Figure對象時,通過figsize參數指定繪圖區域的大小。
# plt.figure(figsize=(3, 3))

# 我們也可以在建立Figure對象之後,通過set_size_inches來設定區域大小。
# figure = plt.figure()
# figure.set_size_inches(5, 5)
# plt.plot([1, 2, 4])
# 擷取目前的figure對象。
# 如果沒有顯式建立Figure對象,我們可以通過plt.gcf擷取目前使用的figure,同樣可以設定繪圖區域的大小。
figure2 = plt.gcf()
# display(figure is figure2)
figure2.set_size_inches(5, 5)
plt.plot([1, 2, 3])      
python資料可視化(matplotlib)資料可視化matplotlib圖形繪制圖形類型Series與DataFrame圖形繪制

标簽與刻度設定

可以通過plt對象的相關方法來設定(或擷取)标簽與刻度等資訊。設定還是擷取,取決于是否傳遞實際參數。

  • plt.xlim 設定或擷取x軸刻度範圍。
  • plt.ylim 設定或擷取y軸刻度範圍。
  • plt.xticks 設定或擷取x軸顯示的刻度與标簽。
  • plt.yticks 設定或擷取y軸顯示的刻度與标簽。
  • plt.axis 可以同時設定或擷取x與y軸的刻度範圍,或者是取消刻度顯示。
    • 無參數:傳回一個元組。(xmin, xmax, ymin, ymax)
    • (xmin, xmax, ymin, ymax) 同時設定x與y軸的刻度範圍。
    • off 取消坐标軸顯示。
    • tight:坐标軸緊湊顯示。
    • equal:x與y具有同樣的長度。

軸标簽說明與标題設定

  • plt.xlabel 設定x軸的标簽說明。
  • plt.ylabel 設定y軸的标簽說明。
  • plt.title 設定标題。
plt.plot([1, 3, 5], [2, 4, 6])
# 顯示x軸刻度的範圍
display(plt.xlim())
# 顯示y軸刻度的傳回
display(plt.ylim())
# 除了擷取之外,我們也可以去設定x與y軸的刻度範圍。
plt.xlim(0, 10)
plt.ylim(-2, 10)
# 擷取x與y的刻度資訊。
# plt.xticks()
# plt.yticks()

# 設定x與y的刻度資訊
plt.xticks([0, 5, 10])
plt.yticks([-2, 4, 10])

# 預設情況下,标簽就是我們設定的刻度資訊。我們可以自定義每個刻度的顯示标簽。
plt.xticks([0, 5, 10], ["偏低", "中等", "偏高"])      
(0.8, 5.2)      
(1.8, 6.2)      
([<matplotlib.axis.XTick at 0x1c98824cd30>,
  <matplotlib.axis.XTick at 0x1c98824c7f0>,
  <matplotlib.axis.XTick at 0x1c98824c518>],
 <a list of 3 Text xticklabel objects>)      
python資料可視化(matplotlib)資料可視化matplotlib圖形繪制圖形類型Series與DataFrame圖形繪制
# axis的使用
# plt.plot([1, 3, 5], [2, 4, 6])
# 可以通過axis來設定或者傳回x與y軸的界限。
# 擷取 
plt.axis()
# 設定 (xmin, xmax, ymin, ymax)
# plt.axis((0, 10, -5, 10))
# 去掉坐标軸
# plt.axis("off")

plt.plot([1, 2, 3], [1, 10, 20])
# 讓x與y軸具有相同的增長度(比例相同)
# plt.axis("equal")      
python資料可視化(matplotlib)資料可視化matplotlib圖形繪制圖形類型Series與DataFrame圖形繪制
# 設定坐标軸的标簽與标題
plt.plot([1, 2, 3])
# 設定x軸的标簽資訊
plt.xlabel("這是x軸")
plt.ylabel("這是y軸")
# 設定标題資訊
plt.title("這是标題")      
Text(0.5,1,'這是标題')      
python資料可視化(matplotlib)資料可視化matplotlib圖形繪制圖形類型Series與DataFrame圖形繪制

通過繪圖對象設定

除了通過plt對象外,我們還可以通過子繪圖對象來設定與擷取标簽與刻度。

  • ax.set_xlim 設定x軸刻度範圍。
  • ax.get_xlim 擷取x軸刻度範圍。
  • ax.set_xticks 設定x軸顯示的刻度。
  • ax.get_xticks 擷取x軸顯示的刻度。
  • ax.set_xticklabels 設定x軸顯示的刻度标簽。預設顯示的是就是刻度值。
  • ax.get_xticklabels 擷取x軸顯示的刻度标簽。

也可以設定标簽說明與标題。

  • ax.set_xlabel 設定x軸的标簽說明。
  • ax.get_xlabel 擷取x軸的标簽說明。
  • ax.set_title 設定标題。
  • ax.get_title 擷取标題。

說明:

  • 如果需要設定或者擷取y軸,隻需要将x換成y即可。
# 除了使用plt進行設定刻度,坐标軸,标簽等資訊外,我們也可以通過繪圖對象來進行設定。
figure, ax = plt.subplots(1, 1)
ax.plot(np.random.random(100))
# 設定x軸的顯示範圍
# ax.set_xlim(0, 120)
# 擷取x軸的顯示範圍
# ax.get_xlim()
# ax.get_xticks()
ax.set_xticks([50, 100, 150])
ax.set_xticklabels(["低", "中", "高"])
# for i in ax.get_xticklabels():
#     display(i)
ax.set_xlabel("時間")
ax.set_ylabel("數值大小")
# ax.get_xlabel()
ax.set_title("波動值")
ax.get_title()      
'波動值'      
python資料可視化(matplotlib)資料可視化matplotlib圖形繪制圖形類型Series與DataFrame圖形繪制

添加注解

我們可以在圖形上繪制文本等說明資訊(注解)。

普通文本

plt.text 顯示文本(基于坐标)

plt.figtext 顯示文本(基于圖檔)

箭頭

plt.arrow 根據起點坐标(x,y)與各自軸的長度(x + dx, y + dy)繪制箭頭。

  • width 箭頭尾部的寬度。
  • head_width 箭頭的寬度。
  • head_length 箭頭的長度。

箭頭與文本

plt.annotate 顯示箭頭與文本。

  • xy 箭頭指向坐标
  • xytext 文本起點坐标。(箭頭尾部坐标)
  • arrowprops 字典類型,可設定箭頭的屬性。
    • facecolor 箭頭的顔色
    • headwidth 箭頭的寬度
    • width 箭尾的寬度
    • shrink 收縮大小
    • headlength 箭頭的長度
    • arrowstyle 一些預設的箭頭樣式。當含有該參數時,上述4項參數将不再有效。
x = np.linspace(-10, 10, 100)
plt.plot(x, x ** 2, "-")
plt.title("抛物線圖")
# 在指定的坐标位置增加文字說明。
# plt.text(0.5,0, "這是極值點")
# plt.text與plt.figtext都可以進行文字說明,不同的是,text是基于坐标定位,而figtext是基于比例定位(左下角為原點)。
# plt.figtext(0.5, 0.5, "說明")
# plt.arrow(7, 20, -5.5, -15, width=1, head_width=4, head_length=4, color="r")
# plt.text(8, 25, "這是極值點")

# 使用text與arrow可以實作箭頭與文本的說明。我們可以使用plt.annotate可以将箭頭與說明文本一同繪制。
# plt.annotate("這是極值點", xy=(0, 0), xytext=(8, 25), arrowprops=dict(width=3, facecolor="g", headwidth=15, shrink=0.05, headlength=25))

plt.annotate("這是極值點", xy=(0, 0), xytext=(8, 25), arrowprops=dict(arrowstyle="<-"))      
Text(8, 25, '這是極值點')      
python資料可視化(matplotlib)資料可視化matplotlib圖形繪制圖形類型Series與DataFrame圖形繪制

圖形類型

折線圖

plt.plot

# 适合于具有增長趨勢的資料表達
plt.plot(np.arange(1, 13), np.random.randint(50, 100, 12), "-o")      
python資料可視化(matplotlib)資料可視化matplotlib圖形繪制圖形類型Series與DataFrame圖形繪制

柱形圖 / 條形圖

plt.bar 柱形圖

plt.barh 條形圖

# 柱形圖/條形圖适合進行資料數值的對比(比較大小)。

# 繪制柱形圖
# plt.bar(["A公司", "B公司", "C公司"], [200, 100, 135])
# 繪制條形圖
plt.barh(["A公司", "B公司", "C公司"], [200, 100, 135])      
<BarContainer object of 3 artists>      
python資料可視化(matplotlib)資料可視化matplotlib圖形繪制圖形類型Series與DataFrame圖形繪制

餅圖

plt.pie 餅圖

  • labels 每個部分顯示的标簽。
  • explode 指定每個部分距離圓心的偏移量(機關為半徑的長度)。
  • colors 指定每個部分的顔色。
  • autopct 設定每個部分顯示的比例值(格式化)。
  • couterclock 是否逆時針繪圖。預設為True。
  • startangle 初始繪圖點位置(逆時針偏移x軸的角度)。預設為偏移0度(x軸)。
  • shadow 是否含有陰影,預設為False。
# 餅圖适合于進行比例的對比。(注意:使用餅圖時,參與對比的資料不宜過多。)

plt.pie([10, 30, 20, 50, 40], labels=["銷售1部", "銷售2部", "銷售3部", "技術1部", "技術2部"], explode=[0, 0, 0, 0, 0.2])
# plt.pie([10, 30, 20, 50, 40], labels=["銷售1部", "銷售2部", "銷售3部", "技術1部", "技術2部"], colors=["r", "g", "b", "y", "b"])
# plt.pie([10, 30, 20, 50, 40], labels=["銷售1部", "銷售2部", "銷售3部", "技術1部", "技術2部"],autopct="%.2f%%")
# plt.pie([10, 30, 20, 50, 40], labels=["銷售1部", "銷售2部", "銷售3部", "技術1部", "技術2部"],counterclock=False)
# plt.pie([10, 30, 20, 50, 40], labels=["銷售1部", "銷售2部", "銷售3部", "技術1部", "技術2部"], startangle=90)
# plt.pie([10, 30, 20, 50, 40], labels=["銷售1部", "銷售2部", "銷售3部", "技術1部", "技術2部"],shadow=True)      
([<matplotlib.patches.Wedge at 0x1c9883cfc18>,
  <matplotlib.patches.Wedge at 0x1c9883d91d0>,
  <matplotlib.patches.Wedge at 0x1c9883d96a0>,
  <matplotlib.patches.Wedge at 0x1c9883d9b70>,
  <matplotlib.patches.Wedge at 0x1c9883e4080>],
 [Text(1.075962358309037, 0.22870287165240302, '銷售1部'),
  Text(0.5499999702695115, 0.9526279613277875, '銷售2部'),
  Text(-0.5500000594609755, 0.9526279098330699, '銷售3部'),
  Text(-1.004899951743044, -0.44741042342219545, '技術1部'),
  Text(0.8698699721849806, -0.9660881075196512, '技術2部')])      
python資料可視化(matplotlib)資料可視化matplotlib圖形繪制圖形類型Series與DataFrame圖形繪制

散點圖 / 氣泡圖

散點圖适合于用來顯示與比較資料的分布狀态。

  • marker 點的标記。
  • s 點的大小。
  • color 點的顔色。

說明:

  • color與s參數可以統一設定,也可以為每一個點單獨設定。
# 散點圖/氣泡圖适合于表示資料的分布情況。
# 散點圖用來表示兩個次元的資料,如果資料次元超過2維,我們可以使用氣泡圖表示。【增加氣泡的大小,顔色,多表示兩個次元】

plt.scatter(np.random.randint(0, 100, 100), np.random.randint(0, 100, 100), marker="o", s = 30, c="g")
# plt.scatter([1, 5, 8], [8,2, 6], s=[30, 100, 60], c=["r", "g", "b"])      
python資料可視化(matplotlib)資料可視化matplotlib圖形繪制圖形類型Series與DataFrame圖形繪制

直方圖

直方圖(histogram)可以看成是一種特殊的柱形圖,用來将連續的資料頻率(數量)進行離散化顯示。在直方圖中,資料被分割成若幹區間,然後統計每個區間資料出現的頻率(數量)。

我們可以通過plt.hist來繪制直方圖。

    • bins:設定分割區間的數量。
    • normed:進行歸一化顯示。(機率密度)
    • # 直方圖适用于将連續型變量(多離散型)切分成離散型表示。
      
      
      # x = np.random.randint(0, 101, 200)
      # 預設情況下,直方圖會劃分成10等分區間。
      # 區間的劃分原則:左閉右開原則。(包含起始點,不包含終止點。)例外:最後一個區間,雙閉區間。(包含起始點,也包含終止點。)
      # plt.hist(x)
      # 如果需要自定義區間數量(等分數量:桶的數量),我們可以通過bins進行控制。
      # plt.hist(x, bins=5)
      # bins參數,除了指定一個标量(區間桶的數量)之外,我們也可以傳遞一個數組。數組指定我們自定義劃分的界限。
      # plt.hist(x, bins=[0, 10, 50, 100])
      
      # 正态分布
      x = np.random.randn(200)
      plt.hist(x, bins=8)      
      (array([ 6., 14., 17., 48., 51., 36., 19.,  9.]),
       array([-2.89321226, -2.25176974, -1.61032721, -0.96888469, -0.32744217,
               0.31400035,  0.95544287,  1.5968854 ,  2.23832792]),
       <a list of 8 Patch objects>)      
      python資料可視化(matplotlib)資料可視化matplotlib圖形繪制圖形類型Series與DataFrame圖形繪制

      箱線圖

      箱線圖也稱盒須圖。通過極值與Q1,Q2,Q3值來描述資料。

      通過箱線圖,我們可以發現資料中的離群(異常)值。 箱線圖的離群點定義為:Q3+1.5IQR和Q1-1.5IQR。其中IQR為兩個四分位之間的距離。

      # 使用箱線圖能夠友善我們進行離群點的檢測。(發現可能的異常值。)
      
      a = [2, 3, 5, 1, 4, 2, 6]
      # df = pd.DataFrame(a)
      # display(df)
      # df.describe()
      plt.boxplot([2, 3, 5, 1, 4, 2, 9])      
      {'whiskers': [<matplotlib.lines.Line2D at 0x1c986f57358>,
        <matplotlib.lines.Line2D at 0x1c986f576a0>],
       'caps': [<matplotlib.lines.Line2D at 0x1c986f579e8>,
        <matplotlib.lines.Line2D at 0x1c986f57d30>],
       'boxes': [<matplotlib.lines.Line2D at 0x1c988466ef0>],
       'medians': [<matplotlib.lines.Line2D at 0x1c986f57e10>],
       'fliers': [<matplotlib.lines.Line2D at 0x1c986f5b400>],
       'means': []}      
      python資料可視化(matplotlib)資料可視化matplotlib圖形繪制圖形類型Series與DataFrame圖形繪制

      Series與DataFrame圖形繪制

      Series與DataFrame類型的對象也支援圖形繪制,使用對象的plot方法即可。

      如果我們需要繪制圖形的資料就存在Series或者DataFrame對象中,我們就可以直接繪制,而無需使用plt.plot。

      其他類型圖形

      plot預設繪制的是線形圖,我們可以通過調整其kind參數的值來繪制其他類型的圖形。
      • line:線形圖
      • bar:柱形圖
      • barh:條形圖
      • hist:直方圖
      • kde / density:核密度圖
      • pie:餅圖
      • box:箱線圖
      • area:面積圖
      參數:
      • color
      • alpha
      • stacked:是否堆疊。
      說明: plot(kind="類型")也可以通過plot."類型"來進行繪制。
      # s = pd.Series([1, 3, 8, 10, 12])
      # s.plot(kind="line", marker="o", color="g")
      # s.plot.line()
      # s.plot(kind="bar")
      # s.plot(kind="barh")
      # s.plot.barh()
      # s.plot(kind="hist")
      # s.plot(kind="kde")
      # s.plot(kind="density")
      # s.plot(kind="pie")
      # s.plot(kind="box")
      # s.plot(kind="area", alpha=0.5)
      df = pd.DataFrame({"A":[10, 5, 8, 7], "B":[12, 11, 3, 6]})
      display(df)
      # df.plot(kind="line")
      # 進行堆疊
      # df.plot(kind="bar", stacked=True)
      # df.plot(kind="barh", stacked=True)
      # df.plot(kind="hist")
      # df.plot(kind="kde")
      # DataFrame在繪制餅圖的時候,需要指定y或subplots=True。
      # y指定列索引。(要繪制哪一個列)
      # df.plot(kind="pie", y="B")
      # 如果DataFrame中的每個列都需要繪制餅圖,可以使用subplots=True,這樣,就可以将每個列在各自的子繪圖區域中繪制餅圖。
      # df.plot(kind="pie", subplots=True)
      # 每個列繪制一個箱線圖。
      # df.plot(kind="box")
      df.plot(kind="area")      
      python資料可視化(matplotlib)資料可視化matplotlib圖形繪制圖形類型Series與DataFrame圖形繪制

轉載于:https://www.cnblogs.com/lqerio/p/11168667.html

上一篇: footer元素
下一篇: time元素

繼續閱讀