柱狀圖、直方圖、散點圖、餅圖講解

G-無憂仙-LB發表於2020-12-30

                                    柱狀圖、直方圖、散點圖、餅圖講解
 

1、柱狀圖
    柱狀圖適用場合是二維資料集(每個資料點包括兩個值x和y),但只有一個維度需要比較。
    例如:年銷售額就是二維資料,”年份”和”銷售額”就是它的兩個維度,但只需要比較”銷售額”這一個維度

    特點:柱狀圖利用柱子的高度來反應資料的差異,肉眼對於高度的差異很敏感,辨識效果非常好!

    柱狀圖的使用方法:
        前面的折線圖使用的是plot函式,但是柱狀圖使用的是bar函式
        語法:
            plt.bar(x,height,width,color)

        其中的引數說明:
            x:記錄x軸上的標籤
            height:記錄每個柱形的高度
            width:設定柱形的寬度
            color:設定柱形的顏色,傳入顏色值的列表,例如:['blue','green','red']
        示例:
            %matplotlib inline
            from matplotlib import pyplot as plt
            from matplotlib import font_manager
            a = ['流浪地球','瘋狂的外星人','飛馳人生','大黃蜂','熊出沒·原始時代','新喜劇之王']
            b = [38.13,19.85,14.89,11.36,6.47,5.93]
            my_font = font_manager.FontProperties(fname='/data/course_data/data_analysis/STSONG.TTF')
            plt.figure(figsize=(20,8),dpi=80)
            # 繪製柱狀圖
            rects = plt.bar(a,b,width=0.3,color=['red','green','blue','cyan','yellow','gray'])
            plt.xticks(a,fontproperties=my_font)
            plt.yticks(range(0,41,5),range(0,41,5))
            # 在條形圖上加標註(水平居中)
            for rect in rects:
                height = rect.get_height()
                plt.text(rect.get_x() + rect.get_width() / 2, height+0.3, str(height),ha="center")
            plt.show()

        細心的同學會注意到,我們將柱形的高度資料標註在了柱形的上方。沒錯,我們使用了plt.text( )
        函式為每個柱形標註高度數值
            plt.text(x,y,s,ha,va)

            函式中前兩個引數分別是資料中的座標,X座標以及Y座標,引數s記錄標註的內容。引數ha和va分別
            用於設定水平和垂直方向的對齊方式
            rects是plt.bar()函式的返回值,裡面包含了每一個柱形為每一個柱形新增數值需要逐個新增,所以
            我們設定一個迴圈來操作

        通過get_height()、get_x()、rect.get_width()等方法可以分別拿到柱形圖的高度,左側邊的x值,
        柱子的寬度。然後,使用plt.text新增上文字,這樣就可以清晰地看出每個柱形的高度了。

2、直方圖
    直方圖一般用來描述等距資料,柱狀圖一般用來描述名稱(類別)資料或順序資料。直觀上,直方圖各個長條
    形是銜接在一起的,表示資料間的數學關係;條形圖各長條形之間留有空隙,區分不同的類

    繪製直方圖使用plt.hist()函式:
        plt.hist(data, bins, facecolor, edgecolor)

        常用引數:
            data:繪圖用到的資料
            bins:控制直方圖中的區間個數
            facecolor:矩形的填充顏色
            edgecolor:條形的邊框顏色

    柱形圖和直方圖的區別:
        第一,柱形圖中用柱形的高度表示各類別的數值,橫軸表示類別,寬度是固定的;而直方圖是用矩形的高度
            表示每一組的頻數或頻率,寬度則表示各組的組距,因此其高度與寬度均有意義。
        第二,直方圖主要用於展示連續型數值型資料,所以各矩形通常是連續排列的;而柱形圖主要用於展示分型別
            資料,常常是分開排列的。

    示例:
        %matplotlib inline
        from matplotlib import pyplot as plt
        from matplotlib import font_manager
        time = [131,  98, 125, 131, 124, 139, 131, 117, 128, 108, 135, 138, 131, 102, 107, 114,
                119, 128, 121, 142, 127, 130, 124, 101, 110, 116, 117, 110, 128, 128, 115,  99,
                136, 126, 134,  95, 138, 117, 111,78, 132, 124, 113, 150, 110, 117,  86,  95, 144,
                105, 126, 130,126, 130, 126, 116, 123, 106, 112, 138, 123,  86, 101,  99, 136,123,
                117, 119, 105, 137, 123, 128, 125, 104, 109, 134, 125, 127,105, 120, 107, 129, 116,
                108, 132, 103, 136, 118, 102, 120, 114,105, 115, 132, 145, 119, 121, 112, 139, 125,
                138, 109, 132, 134,156, 106, 117, 127, 144, 139, 139, 119, 140,  83, 110, 102,123,
                107, 143, 115, 136, 118, 139, 123, 112, 118, 125, 109, 119, 133,112, 114, 122, 109,
                106, 123, 116, 131, 127, 115, 118, 112, 135,115, 146, 137, 116, 103, 144,  83, 123,
                111, 110, 111, 100, 154,136, 100, 118, 119, 133, 134, 106, 129, 126, 110, 111, 109,
                141,120, 117, 106, 149, 122, 122, 110, 118, 127, 121, 114, 125, 126,114, 140, 103,
                130, 141, 117, 106, 114, 121, 114, 133, 137,  92,121, 112, 146,  97, 137, 105,  98,
                117, 112,  81,  97, 139, 113,134, 106, 144, 110, 137, 137, 111, 104, 117, 100, 111,
                101, 110,105, 129, 137, 112, 120, 113, 133, 112,  83,  94, 146, 133, 101,131, 116,
                111,  84, 137, 115, 122, 106, 144, 109, 123, 116, 111,111, 133, 150]
        my_font = font_manager.FontProperties(fname='/data/course_data/data_analysis/STSONG.TTF',size=10)
        # 2)建立畫布
        plt.figure(figsize=(20, 8), dpi=100)
        # 3)繪製直方圖
        # 設定組距
        distance = 2
        # 計算組數
        group_num = int((max(time) - min(time)) / distance)
        # 繪製直方圖
        plt.hist(time, bins=group_num)
        # 修改x軸刻度顯示
        plt.xticks(range(min(time), max(time))[::2])
        # 新增網格顯示
        plt.grid(linestyle="--", alpha=0.5)
        # 新增x, y軸描述資訊
        plt.xlabel("電影時長大小",fontproperties=my_font)
        plt.ylabel("電影的資料量",fontproperties=my_font)
        # 4)顯示影像


3、散點圖
    散點圖是判斷變數之間是否存在數量關聯趨勢,展示離群點。每個點的座標位置由變數的值決定,並由一組不連線
    的點完成,用於觀察兩種變數的相關性。例如,身高—體重、溫度—維度

    繪製直方圖使用plt.scatter()函式:
        plt.scatter(x,y,s,c,marker,alpha,linewidths)
    常用引數
        x,y:陣列
        s:散點圖中點的大小,可選
        c:散點圖中點的顏色,可選
        marker:散點圖的形狀,可選
        alpha:表示透明度,在 0~1 取值,可選
        linewidths:表示線條粗細,可選

    示例:
        %matplotlib inline
        import pandas as pd
        from matplotlib import pyplot as plt
        df = pd.read_csv('/data/course_data/data_analysis/height_weight.csv')
        # 設定圖形大小
        plt.figure(figsize=(20,8),dpi=80)
        # 使用scatter繪製散點圖
        plt.scatter(df['height'],df['weight'],alpha=0.5,c='red')
        plt.show()

4、餅圖
    餅圖是展示 分類資料的佔比情況,就是反映某個部分佔整體的比重
    餅圖的整個圓代表總資料,各個扇形表示每項資料,我們可以根據扇形的角度清楚地看出每個扇形佔總資料的比例

    繪製餅圖我們使用plt.pie( )函式。
        plt.pie(x, labels, autopct, shadow, startangle)


    常用引數
        x:繪製用到的資料
        Tlabels:用於設定餅圖中每一個扇形外側的顯示說明文字
        autopct:設定餅圖內百分比資料,可以使用format字串或者format function,例如’%.1f%%’指
                小數點後保留1位小數
        shadow:表示是否在餅圖下面畫陰影,預設值:False,即不畫陰影
        Tstartangle:設定起始繪製角度,預設圖是從x軸正方向逆時針畫起,如果設定startangle=90,
                則從y軸正方向畫起

    示例:
        %matplotlib inline
        import pandas as pd
        from matplotlib import pyplot as plt
        from matplotlib import font_manager
        my_font = font_manager.FontProperties(fname='/data/course_data/data_analysis/STSONG.TTF',size=10)
        df = pd.read_excel('/data/course_data/data_analysis/lagou.xlsx')
        plt.figure(figsize = (10,8))
        num = df.groupby('學歷').size()
        # 繪製餅圖
        patches, l_text, p_text = plt.pie(num,labels = num.index, autopct='%.1f%%',shadow=False,startangle=90)
        for t in l_text:
            t.set_fontproperties(my_font)
        plt.show()

        程式碼解析:
            df.groupby('學歷').size()按照型別變數學歷對原資料分組,使用groupby函式,然後計算每組資料的
                資料量,使用size()函式,將輸出的資料記錄為num。
            plt.pie()會有三個返回值
            patches: matplotlib.patches.Wedge列表(扇形例項)
            l_text:label matplotlib.text.Text列表(標籤例項)
            p_text:label matplotlib.text.Text列表(百分比標籤例項)
            所以,在每一個扇形外側顯示中文的時候,需要獲取到每一個標籤例項,然後通過set_fontproperties()
            方法設定自定義字型。
        df.groupby('學歷').size()按照型別變數學歷對原資料分組,使用groupby函式,然後計算每組資料的資料
        量,使用size()函式,將輸出的資料記錄為num。

    plt.pie()會有三個返回值:
        patches: matplotlib.patches.Wedge列表(扇形例項)
        l_text:label matplotlib.text.Text列表(標籤例項)
        p_text:label matplotlib.text.Text列表(百分比標籤例項)

    所以,在每一個扇形外側顯示中文的時候,需要獲取到每一個標籤例項,然後通過set_fontproperties()
    方法設定自定義字型。

                                             

                            

                         

相關文章