垂直条形图——plot.bar

垂直条形图——plot.bar

1.条形图的绘制方式plt.bar方法。plt.bar方法有以下常用参数:

x:一个数组或者列表,代表需要绘制的条形图的x轴的坐标点。
height:一个数组或者列表,代表需要绘制的条形图y轴的坐标点。
width:每一个条形图的宽度,默认是0.8的宽度。
bottom:y轴的基线,默认是0,也就是距离底部为0.
align:对齐方式,默认是center,也就是跟指定的x坐标居中对齐,还有为edge,靠边对齐,具体靠右边还是靠左边,看width的正负。
color:条形图的颜色。

返回值为BarContainer,是一个存储了条形图的容器,而条形图实际上的类型是matplotlib.patches.Rectangle对象

In [26]:
import matplotlib.pyplot as plt
import pandas as pd import numpy as np from matplotlib import font_manager font = font_manager.FontProperties(fname=r"C:\Windows\Fonts\Dengb.ttf",size=10) #票房单位亿元 movies = { "流浪地球":40.78, "飞驰人生":15.77, "疯狂的外星人":20.83, "新喜剧之王":6.10, "廉政风云":1.10, "神探蒲松龄":1.49, "小猪佩奇过大年":1.22, "熊出没·原始时代":6.71 } x = list(movies.keys()) y = list(movies.values()) plt.figure(figsize=(12,8),facecolor=(0.8,0.9,0.9),dpi=200) plt.bar(x,y,width=0.6,bottom=1,color=(0.5,0.1,0.2),edgecolor='k') plt.xticks(fontproperties=font) plt.grid(axis='y')
out [26]:

用pandas传入数据

In [2]:
movie_df = pd.DataFrame(data={'name':list(movies.keys()),'ticket':list(movies.values())}) movie_df 
Out [2]:
 nameticket
0流浪地球40.78
1飞驰人生15.77
2疯狂的外星人20.83
3新喜剧之王6.10
4廉政风云1.10
5神探蒲松龄1.49
6小猪佩奇过大年1.22
7熊出没·原始时代6.71
In [3]:
plt.figure(figsize=(12,8),facecolor=(0.8,0.9,0.9),dpi=200) plt.bar('name','ticket',data=movie_df,width=0.6,bottom=0,color='k',edgecolor='k') font.set_size(10) plt.xticks(fontproperties=font) plt.yticks(range(0,50,5)) plt.grid(axis='y') for x,y in zip(movie_df['name'],movie_df['ticket']): plt.annotate(y,xy=(x,y),xytext=(x,y+3),arrowprops=dict(facecolor='g',shrink=0.05), bbox=dict(boxstyle='round,pad=0.5', fc='k', ec='k', lw=1, alpha=0.5)) plt.savefig("G:\matlib文件\条形图用例.png")
out [3]:

垂直条形图——plot.barh

横向条形图使用plt.barh:

y:数组或列表,代表需要绘制的条形图在y轴上的坐标点。
width:数组或列表,代表需要绘制的条形图在x轴上的值(也就是长度)。
height:条形图的高度,默认是0.8。
left:条形图的基线,也就是距离y轴的距离。

其他参数跟bar一样。 返回值也是BarContainer容器对象。

In [24]:
x = list(movies.keys()) y = list(movies.values()) plt.figure(figsize=(12,8),facecolor=(0.8,0.9,0.9),dpi=200) plt.barh(x,y,color=(0.5,0.1,0.2)) plt.yticks(fontproperties=font,size=16) plt.grid(axis='x') for x,y in zip(movie_df['name'],movie_df['ticket']): plt.annotate(y,xy=(y,x),xytext=(y+1.5,x),arrowprops=dict(facecolor='g',shrink=0.05), bbox=dict(boxstyle='round,pad=0.5', fc='k', ec='k', lw=1, alpha=0.5)) plt.savefig("G:\matlib文件\横向条形图.png")
out [24]:

分组条形图——plot.bars

In [5]:
movs = {
    "流浪地球":[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] } mov_df = pd.DataFrame(movs) mov_df
Out [5]:
 流浪地球飞驰人生疯狂的外星人新喜剧之王廉政风云神探蒲松龄小猪佩奇过大年熊出没·原始时代
02.013.194.072.720.560.660.581.13
14.595.086.923.790.740.950.811.96
27.996.739.304.450.831.100.942.73
311.838.1011.294.830.881.171.013.42
416.009.3513.035.110.921.231.074.05
In [6]:
plt.figure(figsize=(15,5),facecolor=(0.8,0.9,0.9),dpi=200) '''for index in mov_df.index: series = mov_df.iloc[index] print(series) plt.bar(series.index,series.values)''' xticks = np.arange(0,len(movs)) bar_width = 0.15 plt.bar(xticks-2*bar_width,mov_df.iloc[0],width=bar_width) plt.bar(xticks-1*bar_width,mov_df.iloc[1],width=bar_width) plt.bar(xticks,mov_df.iloc[2],width=bar_width) plt.bar(xticks+1*bar_width,mov_df.iloc[3],width=bar_width) plt.bar(xticks+2*bar_width,mov_df.iloc[4],width=bar_width) plt.xticks(xticks,list(movs.keys()),fontproperties=font,size=13) plt.grid(axis='y')
out [6]:
In [7]:
plt.figure(figsize=(15,5),facecolor=(0.8,0.9,0.9),dpi=200) for index in mov_df.index: day_tickets = mov_df.iloc[index] xs = xticks-(bar_width*(2-index)) plt.bar(xticks+(-2+index)*bar_width,mov_df.iloc[index],width=bar_width,label="第%s天票房"%(index+1)) for ticket,x in zip(day_tickets,xs): plt.annotate(ticket,xy=(x,ticket),xytext=(x-0.1,ticket+0.1)) plt.xticks(xticks,mov_df.columns,fontproperties=font,size=13) plt.grid() font.set_size(15) plt.legend(prop=font) plt.savefig("G:\matlib文件\分组条形图用例.png")
out [7]:
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值