ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

垂直条形图——plot.bar

2021-10-08 02:32:10  阅读:226  来源: 互联网

标签:plot plt bar df xticks width 条形图


 

垂直条形图——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]:
 流浪地球飞驰人生疯狂的外星人新喜剧之王廉政风云神探蒲松龄小猪佩奇过大年熊出没·原始时代
0 2.01 3.19 4.07 2.72 0.56 0.66 0.58 1.13
1 4.59 5.08 6.92 3.79 0.74 0.95 0.81 1.96
2 7.99 6.73 9.30 4.45 0.83 1.10 0.94 2.73
3 11.83 8.10 11.29 4.83 0.88 1.17 1.01 3.42
4 16.00 9.35 13.03 5.11 0.92 1.23 1.07 4.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]:

标签:plot,plt,bar,df,xticks,width,条形图
来源: https://www.cnblogs.com/gujianjian/p/15377840.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有