最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何使用Python?Matplotlib繪制條形圖

 更新時(shí)間:2022年06月30日 13:13:06   作者:芒果去核  
當(dāng)我們使用plot方法繪圖時(shí),默認(rèn)繪制的是折線圖,下面這篇文章主要給大家介紹了關(guān)于如何使用Python?Matplotlib繪制條形圖的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下

前言

matplotlib是一個(gè)非常強(qiáng)大的Python第三方繪圖包,可以繪制非常多非常漂亮的圖形。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import font_manager

一、一般條形圖

一般條形圖使用 pyplot.bar()函數(shù)繪制,其形式及參數(shù)如下:

matplotlib.pyplot.bar(x, height, width=0.8, bottom=None, *, align='center', data=None, **kwargs)
主要參數(shù)解釋:
# x:一個(gè)數(shù)組或者列表,代表需要繪制的條形圖的x軸的坐標(biāo)點(diǎn)。
# height:一個(gè)數(shù)組或者列表,代表需要繪制的條形圖y軸的坐標(biāo)點(diǎn)。
# width:每一個(gè)條形圖的寬度,默認(rèn)是0.8的寬度。
# bottom:y軸的基線,默認(rèn)是0,也就是距離底部為0.
# align:對(duì)齊方式,{'center','edge'},默認(rèn)是center,居中對(duì)齊;edge為靠邊對(duì)齊,具體靠右邊還是靠左邊,看width的正負(fù)。
# color:條形圖的顏色。
# edgecolor : 條形圖邊框的顏色。
# linewidth  : 條形圖邊框的寬度。如果為 0,則不繪制邊框

pyplot.bar()完整參數(shù)戳這里

示例:

某天電影票房數(shù)據(jù):

movies = {
    "流浪地球":40.78,
    "飛馳人生":15.77,
    "瘋狂的外星人":20.83,
    "新喜劇之王":6.10,
    "廉政風(fēng)云":1.10,
    "神探蒲松齡":1.49,
    "小豬佩奇過大年":1.22,
    "熊出沒·原始時(shí)代":6.71
}

直接通過獲取字典的鍵值作為x,y軸數(shù)據(jù)

#票房單位億元
movies = {
    "流浪地球":40.78,
    "飛馳人生":15.77,
    "瘋狂的外星人":20.83,
    "新喜劇之王":6.10,
    "廉政風(fēng)云":1.10,
    "神探蒲松齡":1.49,
    "小豬佩奇過大年":1.22,
    "熊出沒·原始時(shí)代":6.71
}
# 中文顯示問題
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.rcParams['font.size'] = 13
# 設(shè)置圖大小
plt.figure(figsize=(15,8))

x = list(movies.keys()) # 獲取x軸數(shù)據(jù)(字典的鍵)
y = list(movies.values()) # 獲取y軸數(shù)據(jù)(字典的值)

plt.bar(x,y,width=0.5,bottom=0,align='edge',color='g',edgecolor ='r',linewidth=2)

# 繪制標(biāo)題
plt.title("電影票房數(shù)據(jù)",size=26)

# 設(shè)置軸標(biāo)簽
plt.xlabel("電影名",size=28)
plt.ylabel("票房/億",size=28)

plt.show()

也可以利用字典創(chuàng)建DataFrame索引,通過data參數(shù)傳入

#票房單位億元
movies = {
    "流浪地球":40.78,
    "飛馳人生":15.77,
    "瘋狂的外星人":20.83,
    "新喜劇之王":6.10,
    "廉政風(fēng)云":1.10,
    "神探蒲松齡":1.49,
    "小豬佩奇過大年":1.22,
    "熊出沒·原始時(shí)代":6.71
}
movies_df = pd.DataFrame(data={"name":list(movies.keys()),"tickes":list(movies.values())}) #通過字典創(chuàng)建DataFrame索引
font = font_manager.FontProperties(fname='C:\Windows\Fonts\STSONG.TTF',size=12)  # 使用font_manager模塊設(shè)置中文

# 設(shè)置圖的大小,傳入x,y
plt.figure(figsize=(14,5))

# 使用plt.bar()繪制條形圖
plt.bar("name","tickes",data=movies_df,width=0.5,bottom=0,align='edge',color='g',edgecolor ='r',linewidth=2)

#設(shè)置X軸刻度,設(shè)置字體,也可以設(shè)置字體大小size
plt.xticks(fontproperties=font)

# 設(shè)置標(biāo)題
plt.title("電影票房數(shù)據(jù)",size=30)
#設(shè)置X,Y軸名字
plt.ylabel('票房',fontproperties=font,size=25)
plt.xlabel('影片名字',fontproperties=font,size=25)

#設(shè)置Y刻度
plt.yticks(range(0,50,5),["%d"%x for x in range(0,50,5)],fontproperties=font1,size=20)

# 只保留圖形信息
plt.show()

二、橫向條形圖

橫向條形圖需要使用barh()這個(gè)跟bar非常的類似,只不過把方向進(jìn)行旋轉(zhuǎn)。參數(shù)也和pyplot.bar()類似

matplotlib.pyplot.barh(y, width, height=0.8, left=None, *, align='center', **kwargs)
# 主要參數(shù)解釋:
# y:數(shù)組或列表,代表需要繪制的條形圖在y軸上的坐標(biāo)點(diǎn)。
# width:數(shù)組或列表,代表需要繪制的條形圖在x軸上的值(也就是長(zhǎng)度)。
# height:條形圖的高度(寬度),默認(rèn)是0.8。
# left:條形圖的基線,也就是距離y軸的距離。默認(rèn)為0

pyplot.barh()完整參數(shù)

示例:

plt.barh()

movies = {
    "流浪地球":40.78,
    "飛馳人生":15.77,
    "瘋狂的外星人":20.83,
    "新喜劇之王":6.10,
    "廉政風(fēng)云":1.10,
    "神探蒲松齡":1.49,
    "小豬佩奇過大年":1.22,
    "熊出沒·原始時(shí)代":6.71
}
font2 = font_manager.FontProperties(fname='C:\Windows\Fonts\STSONG.TTF')
x1 = list(movies.keys())
y1 = list(movies.values())

# 設(shè)置圖的大小
plt.figure(figsize=(10,5))

# 使用plt.barh()
plt.barh(x1,y1,height=0.7,left=0,color='c',edgecolor='r')

#設(shè)置Y軸刻度,設(shè)置字體,也可以設(shè)置字體大小size
plt.yticks(fontproperties=font2,size=20)

plt.xlabel("票房/億",size=20)

# 設(shè)置標(biāo)題
plt.title("電影票房數(shù)據(jù)",size=30)

# 只保留圖形信息
plt.show()

Axes.barh(y, width, height=0.8, left=None, *, align='center', **kwargs)

另外,還可通過返回的axes對(duì)象繪制圖形

movies = {
    "流浪地球":40.78,
    "飛馳人生":15.77,
    "瘋狂的外星人":20.83,
    "新喜劇之王":6.10,
    "廉政風(fēng)云":1.10,
    "神探蒲松齡":1.49,
    "小豬佩奇過大年":1.22,
    "熊出沒·原始時(shí)代":6.71
}

font2 = font_manager.FontProperties(fname='C:\Windows\Fonts\STSONG.TTF')
mdf = pd.DataFrame(data={"name":list(movies.keys()),"tickes":list(movies.values())})

fig,axes = plt.subplots()  

# 通過返回的axes對(duì)象繪制圖形
axes.barh("name","tickes",data = mdf,height=0.6,left=0,color='c',edgecolor='r')

#設(shè)置Y軸刻度,設(shè)置字體,也可以設(shè)置字體大小size
plt.yticks(fontproperties=font2,size=20)

plt.xlabel("票房/億",size=24)

# 設(shè)置標(biāo)題
plt.title("電影票房數(shù)據(jù)",size=27)

# 只保留圖形信息
plt.show()

三、分組條形圖的繪制

五天的電影票房數(shù)據(jù)(假設(shè)日期為1.1-1.5):并轉(zhuǎn)換為DataFrame索引

movies = {
    "流浪地球":[2.01,4.59,7.99,11.83,16],
    "飛馳人生":[3.19,5.08,6.73,8.10,9.35],
    "瘋狂的外星人":[4.07,6.92,9.30,11.29,13.03],
    "新喜劇之王":[2.72,3.79,4.45,4.83,5.11],
    "廉政風(fēng)云":[0.56,0.74,0.83,0.88,0.92],
    "神探蒲松齡":[0.66,0.95,1.10,1.17,1.23],
    "小豬佩奇過大年":[0.58,0.81,0.94,1.01,1.07],
    "熊出沒·原始時(shí)代":[1.13,1.96,2.73,3.42,4.05]
}
mdf = pd.DataFrame(movies)  
mdf

繪制分組條形圖思路:先選出每天所有電影的票房數(shù)據(jù),可使用DataFrame.iloc[]方法獲取,例如

# 獲取第一天票房數(shù)據(jù)
mdf.iloc[0]
流浪地球        2.01
飛馳人生        3.19
瘋狂的外星人      4.07
新喜劇之王       2.72
廉政風(fēng)云        0.56
神探蒲松齡       0.66
小豬佩奇過大年     0.58
熊出沒·原始時(shí)代    1.13
Name: 0, dtype: float64

然后按天進(jìn)行繪制,這里需要確定一個(gè)中心點(diǎn)作為中間日期的條形圖位置(這里為第三天),有多少部電影就需要多少個(gè)中心點(diǎn),可使用np.arange(len(movies))獲取x軸刻度作為中心點(diǎn)。最后根據(jù)日期按條形圖的寬度調(diào)整條形圖位置即可。

plt.figure(figsize=(15,5))
# 設(shè)置X軸刻度為一個(gè)數(shù)組(有廣播功能)
xticks = np.arange(len(movies)) 

#設(shè)置字體
font = font_manager.FontProperties(fname='C:\Windows\Fonts\STSONG.TTF')

# 設(shè)置條形圖寬度
bar_width = 0.15

#設(shè)置第一天所有影片條形圖的位置
plt.bar(xticks-2*bar_width,mdf.iloc[0],width=bar_width,color='pink') # iloc[]取DataFrame的一行
#設(shè)置第二天所有影片條形圖的位置 
plt.bar(xticks-bar_width,mdf.iloc[1],width=bar_width)
#設(shè)置第三天所有影片條形圖的位置,默認(rèn)在[0 1 2 3 4 5 6 7]center處
plt.bar(xticks,mdf.iloc[2],width=bar_width)
#設(shè)置第四天所有影片條形圖的位置
plt.bar(xticks+bar_width,mdf.iloc[3],width=bar_width)
#設(shè)置第五天所有影片條形圖的位置
plt.bar(xticks+2*bar_width,mdf.iloc[4],width=bar_width)

# 設(shè)置X軸信息
plt.xticks(xticks,mdf.columns,fontproperties=font,size=15)
#設(shè)置Y刻度
plt.yticks(range(0,20,2),["%d"%x for x in range(0,20,2)],fontproperties=font,size=16)

#設(shè)置X,Y軸名字
plt.ylabel('票房/億',fontproperties=font,size=30)
plt.xlabel('影片名字',fontproperties=font,size=30)

# 設(shè)置標(biāo)題
plt.title("五日票房數(shù)據(jù)",fontproperties=font,size=30)

# 只保留圖形信息
plt.show()

使用循環(huán)繪制每日數(shù)據(jù)

plt.figure(figsize=(16,5))
# 設(shè)置X軸刻度為一個(gè)數(shù)組(有廣播功能)
#xticks1 = np.arange(len(movies)) # 這樣設(shè)置每部電影X軸的距離是1,如果5個(gè)條形圖寬度之后大于1會(huì)和其他電影重疊,可以設(shè)置步長(zhǎng)
xticks1 = np.arange(0,7*len(movies),7) # 改變步長(zhǎng),要在設(shè)置X軸信息處改變xticks(步長(zhǎng)*ticks labels)的第一個(gè)參數(shù),否則對(duì)應(yīng)不上

#設(shè)置字體
font4 = font_manager.FontProperties(fname='C:\Windows\Fonts\STSONG.TTF')

# 設(shè)置條形圖寬度
bar_width1 = 1.05

#使用循環(huán)畫出前五天的條形圖
for index in mdf.index:
   # plt.bar(xticks1+(-2+index)*bar_width1,mdf.iloc[index],width=bar_width1,label='第%d天票房'%(index+1))
    xs = xticks1+(-2+index)*bar_width1 # 在X軸的位置
    day_tickets = mdf.iloc[index]
    plt.bar(xs,day_tickets,width=bar_width*7,label="第%d天票房"%(index+1))
    #設(shè)置注釋文本
    # zip(day_tickets,xs)打包為元素為元組的列表,元素個(gè)數(shù)與最短的列表一致
    for ticket,x in zip(day_tickets,xs):   # ticket是day_tickets列表的值,x是xs的值
        plt.annotate(ticket,xy=(x,ticket),xytext=(x-0.2,ticket+0.1))


# 設(shè)置X軸信息
plt.xticks(7*xticks,mdf.columns,fontproperties=font4,size=15)

#設(shè)置X,Y軸名字
plt.ylabel('票房/億',fontproperties=font4,size=25)
plt.xlabel('影片名字',fontproperties=font4,size=25)

# 設(shè)置標(biāo)題
plt.title("五日票房數(shù)據(jù)",fontproperties=font4,size=30)

# 設(shè)置圖例
font4.set_size(15) # 圖例無(wú)size屬性,可以在字體設(shè)置font4中改大小(或者font.set_size():只改圖例
plt.legend(prop=font4)  # 根據(jù)bar()函數(shù)的中的label標(biāo)簽進(jìn)行設(shè)置,不可缺少

# 設(shè)置網(wǎng)格
plt.grid()

# 只保留圖形信息
plt.show()

四、堆疊條形圖繪制

堆疊條形圖就是在已有數(shù)據(jù)基礎(chǔ)位置上進(jìn)行繪制圖形,使用bottom參數(shù),以已有數(shù)據(jù)作為新數(shù)據(jù)的基地進(jìn)行新數(shù)據(jù)的繪制,可以達(dá)到調(diào)整條形圖的位置的目的。

示例:

# 男女不同組別的等分情況
menMeans = (20, 35, 30, 35, 27)
womenMeans = (25, 32, 34, 20, 25)
groupNames = ('G1','G2','G3','G4','G5')

xs = np.arange(len(menMeans))  # 有多少個(gè)組

font5 = font_manager.FontProperties(fname='C:\Windows\Fonts\STSONG.TTF',size=16)

plt.figure(figsize=(15,7))

# 繪制男性得分
plt.bar(xs,menMeans,label='男性得分',width=0.4)

# 繪制女性得分,以男性得分的最大值為基底
plt.bar(xs,womenMeans,bottom=menMeans,label='女性得分',width=0.4)

#設(shè)置圖例
plt.legend(prop=font5)  # 根據(jù)bar()函數(shù)的中的label標(biāo)簽進(jìn)行設(shè)置

# 設(shè)置X軸刻度名稱
plt.xticks(xs,groupNames)

# 設(shè)置標(biāo)簽
plt.xlabel("組別",fontproperties=font5,size=23)
plt.ylabel("得分",fontproperties=font5,size=23)

# 設(shè)置標(biāo)題
plt.title("男女不同組別得分",fontproperties=font5,size=28)

# 只保留圖形
plt.show()

總結(jié) 

到此這篇關(guān)于如何使用Python Matplotlib繪制條形圖的文章就介紹到這了,更多相關(guān)Python Matplotlib繪制條形圖內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python實(shí)現(xiàn)簡(jiǎn)單飛行棋

    python實(shí)現(xiàn)簡(jiǎn)單飛行棋

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)簡(jiǎn)單飛行棋,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • Ubuntu 20.04安裝Pycharm2020.2及鎖定到任務(wù)欄的問題(小白級(jí)操作)

    Ubuntu 20.04安裝Pycharm2020.2及鎖定到任務(wù)欄的問題(小白級(jí)操作)

    這篇文章主要介紹了Ubuntu 20.04安裝Pycharm2020.2及鎖定到任務(wù)欄的問題,本教程給大家講解的很詳細(xì),非常適合小白級(jí)操作,需要的朋友可以參考下
    2020-10-10
  • Python 中 and, or, &, |, ^ 的使用小結(jié)

    Python 中 and, or, &, |, ^ 

    這篇文章主要介紹了Python 中 and, or, &, |, ^ 的使用小結(jié),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-01-01
  • 關(guān)于Flask 視圖介紹

    關(guān)于Flask 視圖介紹

    這篇文章主要分享的是關(guān)于Flask 視圖介紹, Flask 中路由是請(qǐng)求的 url 與處理函數(shù)之間的映射,使用app.route裝飾器將處理函數(shù)和 url 綁定,路由綁定的處理函數(shù)就被成為視圖函數(shù)。下面來看文章的詳細(xì)內(nèi)容,需要的朋友也可以參考一下
    2021-11-11
  • 基于Flask實(shí)現(xiàn)的Windows事件ID查詢系統(tǒng)

    基于Flask實(shí)現(xiàn)的Windows事件ID查詢系統(tǒng)

    Windows操作系統(tǒng)的事件日志系統(tǒng)記錄了數(shù)百種不同的事件ID,每個(gè)ID對(duì)應(yīng)特定的系統(tǒng)事件,本文介紹如何構(gòu)建一個(gè)基于Web的事件ID查詢系統(tǒng),文章通過代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2025-04-04
  • Python實(shí)現(xiàn)簡(jiǎn)單的猜單詞

    Python實(shí)現(xiàn)簡(jiǎn)單的猜單詞

    這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)簡(jiǎn)單的猜單詞,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • pyhton Sanic框架的文件上傳功能開發(fā)實(shí)戰(zhàn)示例教程

    pyhton Sanic框架的文件上傳功能開發(fā)實(shí)戰(zhàn)示例教程

    Sanic是一個(gè)Python 3.5+的異步Web框架,它的設(shè)計(jì)理念與Flask相似,但采用了更高效的異步I/O處理,在處理文件上傳時(shí),Sanic同樣提供了方便、高效的方法,本教程將結(jié)合實(shí)際案例,詳細(xì)介紹如何在Sanic框架中實(shí)現(xiàn)文件上傳的功能,感興趣的朋友跟隨小編一起看看吧
    2024-08-08
  • Pandas中Series的屬性,方法,常用操作使用案例

    Pandas中Series的屬性,方法,常用操作使用案例

    這篇文章主要介紹了Pandas中Series的屬性,方法,常用操作使用案例,文章通過包的引入展開主題,需要的朋友可以參考一下
    2022-07-07
  • Python運(yùn)算符重載用法實(shí)例分析

    Python運(yùn)算符重載用法實(shí)例分析

    這篇文章主要介紹了Python運(yùn)算符重載用法,實(shí)例分析了幾種常見的Python運(yùn)算符重載的使用技巧,需要的朋友可以參考下
    2015-06-06
  • Anaconda2 5.2.0安裝使用圖文教程

    Anaconda2 5.2.0安裝使用圖文教程

    這篇文章主要為大家詳細(xì)介紹了Anaconda2 5.2.0安裝使用圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-09-09

最新評(píng)論

云浮市| 东乡县| 瓦房店市| 鲜城| 石楼县| 杭锦后旗| 灵武市| 金平| 新田县| 淳安县| 孝义市| 浪卡子县| 万宁市| 左云县| 和平县| 金门县| 阳高县| 同江市| 晋宁县| 栾城县| 阿尔山市| 西昌市| 临桂县| 延津县| 合作市| 寿阳县| 邹城市| 绥宁县| 衡山县| 六安市| 泗阳县| 从化市| 甘洛县| 象山县| 罗平县| 邵武市| 岗巴县| 祁阳县| 宜川县| 松溪县| 朝阳区|