<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
import numpy as np import pandas as pd import matplotlib.pyplot as plt from matplotlib import font_manager
一般條形圖使用 pyplot.bar()
函數繪製,其形式及引數如下:
matplotlib.pyplot.bar(x, height, width=0.8, bottom=None, *, align='center', data=None, **kwargs)
主要引數解釋: # x:一個陣列或者列表,代表需要繪製的條形圖的x軸的座標點。 # height:一個陣列或者列表,代表需要繪製的條形圖y軸的座標點。 # width:每一個條形圖的寬度,預設是0.8的寬度。 # bottom:y軸的基線,預設是0,也就是距離底部為0. # align:對齊方式,{'center','edge'},預設是center,居中對齊;edge為靠邊對齊,具體靠右邊還是靠左邊,看width的正負。 # color:條形圖的顏色。 # edgecolor : 條形圖邊框的顏色。 # linewidth : 條形圖邊框的寬度。如果為 0,則不繪製邊框
某天電影票房資料:
movies = { "流浪地球":40.78, "飛馳人生":15.77, "瘋狂的外星人":20.83, "新喜劇之王":6.10, "廉政風雲":1.10, "神探蒲松齡":1.49, "小豬佩奇過大年":1.22, "熊出沒·原始時代":6.71 }
直接通過獲取字典的鍵值作為x,y軸資料
#票房單位億元 movies = { "流浪地球":40.78, "飛馳人生":15.77, "瘋狂的外星人":20.83, "新喜劇之王":6.10, "廉政風雲":1.10, "神探蒲松齡":1.49, "小豬佩奇過大年":1.22, "熊出沒·原始時代":6.71 } # 中文顯示問題 plt.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False plt.rcParams['font.size'] = 13 # 設定圖大小 plt.figure(figsize=(15,8)) x = list(movies.keys()) # 獲取x軸資料(字典的鍵) y = list(movies.values()) # 獲取y軸資料(字典的值) plt.bar(x,y,width=0.5,bottom=0,align='edge',color='g',edgecolor ='r',linewidth=2) # 繪製標題 plt.title("電影票房資料",size=26) # 設定軸標籤 plt.xlabel("電影名",size=28) plt.ylabel("票房/億",size=28) plt.show()
也可以利用字典建立DataFrame索引,通過data引數傳入
#票房單位億元 movies = { "流浪地球":40.78, "飛馳人生":15.77, "瘋狂的外星人":20.83, "新喜劇之王":6.10, "廉政風雲":1.10, "神探蒲松齡":1.49, "小豬佩奇過大年":1.22, "熊出沒·原始時代":6.71 } movies_df = pd.DataFrame(data={"name":list(movies.keys()),"tickes":list(movies.values())}) #通過字典建立DataFrame索引 font = font_manager.FontProperties(fname='C:WindowsFontsSTSONG.TTF',size=12) # 使用font_manager模組設定中文 # 設定圖的大小,傳入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) #設定X軸刻度,設定字型,也可以設定字型大小size plt.xticks(fontproperties=font) # 設定標題 plt.title("電影票房資料",size=30) #設定X,Y軸名字 plt.ylabel('票房',fontproperties=font,size=25) plt.xlabel('影片名字',fontproperties=font,size=25) #設定Y刻度 plt.yticks(range(0,50,5),["%d"%x for x in range(0,50,5)],fontproperties=font1,size=20) # 只保留圖形資訊 plt.show()
橫向條形圖需要使用barh()
這個跟bar非常的類似,只不過把方向進行旋轉。引數也和pyplot.bar()
類似
matplotlib.pyplot.barh(y, width, height=0.8, left=None, *, align='center', **kwargs)
# 主要引數解釋: # y:陣列或列表,代表需要繪製的條形圖在y軸上的座標點。 # width:陣列或列表,代表需要繪製的條形圖在x軸上的值(也就是長度)。 # height:條形圖的高度(寬度),預設是0.8。 # left:條形圖的基線,也就是距離y軸的距離。預設為0
plt.barh()
movies = { "流浪地球":40.78, "飛馳人生":15.77, "瘋狂的外星人":20.83, "新喜劇之王":6.10, "廉政風雲":1.10, "神探蒲松齡":1.49, "小豬佩奇過大年":1.22, "熊出沒·原始時代":6.71 } font2 = font_manager.FontProperties(fname='C:WindowsFontsSTSONG.TTF') x1 = list(movies.keys()) y1 = list(movies.values()) # 設定圖的大小 plt.figure(figsize=(10,5)) # 使用plt.barh() plt.barh(x1,y1,height=0.7,left=0,color='c',edgecolor='r') #設定Y軸刻度,設定字型,也可以設定字型大小size plt.yticks(fontproperties=font2,size=20) plt.xlabel("票房/億",size=20) # 設定標題 plt.title("電影票房資料",size=30) # 只保留圖形資訊 plt.show()
Axes.barh(y, width, height=0.8, left=None, *, align='center', **kwargs)
另外,還可通過返回的axes物件繪製圖形
movies = { "流浪地球":40.78, "飛馳人生":15.77, "瘋狂的外星人":20.83, "新喜劇之王":6.10, "廉政風雲":1.10, "神探蒲松齡":1.49, "小豬佩奇過大年":1.22, "熊出沒·原始時代":6.71 } font2 = font_manager.FontProperties(fname='C:WindowsFontsSTSONG.TTF') mdf = pd.DataFrame(data={"name":list(movies.keys()),"tickes":list(movies.values())}) fig,axes = plt.subplots() # 通過返回的axes物件繪製圖形 axes.barh("name","tickes",data = mdf,height=0.6,left=0,color='c',edgecolor='r') #設定Y軸刻度,設定字型,也可以設定字型大小size plt.yticks(fontproperties=font2,size=20) plt.xlabel("票房/億",size=24) # 設定標題 plt.title("電影票房資料",size=27) # 只保留圖形資訊 plt.show()
五天的電影票房資料(假設日期為1.1-1.5):並轉換為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], "廉政風雲":[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], "熊出沒·原始時代":[1.13,1.96,2.73,3.42,4.05] } mdf = pd.DataFrame(movies) mdf
繪製分組條形圖思路:先選出每天所有電影的票房資料,可使用DataFrame.iloc[]
方法獲取,例如
# 獲取第一天票房資料 mdf.iloc[0]
流浪地球 2.01 飛馳人生 3.19 瘋狂的外星人 4.07 新喜劇之王 2.72 廉政風雲 0.56 神探蒲松齡 0.66 小豬佩奇過大年 0.58 熊出沒·原始時代 1.13 Name: 0, dtype: float64
然後按天進行繪製,這裡需要確定一箇中心點作為中間日期的條形圖位置(這裡為第三天),有多少部電影就需要多少箇中心點,可使用np.arange(len(movies))
獲取x軸刻度作為中心點。最後根據日期按條形圖的寬度調整條形圖位置即可。
plt.figure(figsize=(15,5)) # 設定X軸刻度為一個陣列(有廣播功能) xticks = np.arange(len(movies)) #設定字型 font = font_manager.FontProperties(fname='C:WindowsFontsSTSONG.TTF') # 設定條形圖寬度 bar_width = 0.15 #設定第一天所有影片條形圖的位置 plt.bar(xticks-2*bar_width,mdf.iloc[0],width=bar_width,color='pink') # iloc[]取DataFrame的一行 #設定第二天所有影片條形圖的位置 plt.bar(xticks-bar_width,mdf.iloc[1],width=bar_width) #設定第三天所有影片條形圖的位置,預設在[0 1 2 3 4 5 6 7]center處 plt.bar(xticks,mdf.iloc[2],width=bar_width) #設定第四天所有影片條形圖的位置 plt.bar(xticks+bar_width,mdf.iloc[3],width=bar_width) #設定第五天所有影片條形圖的位置 plt.bar(xticks+2*bar_width,mdf.iloc[4],width=bar_width) # 設定X軸資訊 plt.xticks(xticks,mdf.columns,fontproperties=font,size=15) #設定Y刻度 plt.yticks(range(0,20,2),["%d"%x for x in range(0,20,2)],fontproperties=font,size=16) #設定X,Y軸名字 plt.ylabel('票房/億',fontproperties=font,size=30) plt.xlabel('影片名字',fontproperties=font,size=30) # 設定標題 plt.title("五日票房資料",fontproperties=font,size=30) # 只保留圖形資訊 plt.show()
使用迴圈繪製每日資料
plt.figure(figsize=(16,5)) # 設定X軸刻度為一個陣列(有廣播功能) #xticks1 = np.arange(len(movies)) # 這樣設定每部電影X軸的距離是1,如果5個條形圖寬度之後大於1會和其他電影重疊,可以設定步長 xticks1 = np.arange(0,7*len(movies),7) # 改變步長,要在設定X軸資訊處改變xticks(步長*ticks labels)的第一個引數,否則對應不上 #設定字型 font4 = font_manager.FontProperties(fname='C:WindowsFontsSTSONG.TTF') # 設定條形圖寬度 bar_width1 = 1.05 #使用迴圈畫出前五天的條形圖 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)) #設定註釋文字 # zip(day_tickets,xs)打包為元素為元組的列表,元素個數與最短的列表一致 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)) # 設定X軸資訊 plt.xticks(7*xticks,mdf.columns,fontproperties=font4,size=15) #設定X,Y軸名字 plt.ylabel('票房/億',fontproperties=font4,size=25) plt.xlabel('影片名字',fontproperties=font4,size=25) # 設定標題 plt.title("五日票房資料",fontproperties=font4,size=30) # 設定圖例 font4.set_size(15) # 圖例無size屬性,可以在字型設定font4中改大小(或者font.set_size():只改圖例 plt.legend(prop=font4) # 根據bar()函數的中的label標籤進行設定,不可缺少 # 設定網格 plt.grid() # 只保留圖形資訊 plt.show()
堆疊條形圖就是在已有資料基礎位置上進行繪製圖形,使用bottom
引數,以已有資料作為新資料的基地進行新資料的繪製,可以達到調整條形圖的位置的目的。
# 男女不同組別的等分情況 menMeans = (20, 35, 30, 35, 27) womenMeans = (25, 32, 34, 20, 25) groupNames = ('G1','G2','G3','G4','G5') xs = np.arange(len(menMeans)) # 有多少個組 font5 = font_manager.FontProperties(fname='C:WindowsFontsSTSONG.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) #設定圖例 plt.legend(prop=font5) # 根據bar()函數的中的label標籤進行設定 # 設定X軸刻度名稱 plt.xticks(xs,groupNames) # 設定標籤 plt.xlabel("組別",fontproperties=font5,size=23) plt.ylabel("得分",fontproperties=font5,size=23) # 設定標題 plt.title("男女不同組別得分",fontproperties=font5,size=28) # 只保留圖形 plt.show()
本篇文章就到這裡了,希望能夠給你帶來幫助,也希望您能夠多多關注it145.com的更多內容!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45