暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

让你彻底弄懂用Python绘制条形图(柱状图)

阿黎逸阳的代码 2021-02-02
2072

条形图(bar chart)也称为柱状图,是一种以长方形的长度为变量的统计图表,长方形的长度与它所对应的数值呈一定比例。


本文目录
  1. 导入绘图数据

  2. 竖放条形图

    2.1 竖放条形图绘图原理

    2.2  绘制竖放条形图

    2.3  优化绘制竖放条形图

  3. 横放条形图

    3.1 横放条形图绘图原理

    3.2 绘制横放条形图

  4. 并列条形图

  5. 叠加条形图

  6. 拼接条形图

  7. 多重显示条形图


一、导入绘图数据
首先导入绘图所需的数据。
import os
import pandas as pd


os.chdir(r'F:\公众号\6.学习python') #设置成存放数据文件夹路径
date = pd.read_csv("股票数据.csv", encoding = 'GBK') #读取数据
注:如需文中数据进行练习,可到公众号中回复“股票数据波动”即可免费获取。
展示前几行数据如下:


二、竖放条形图

 1   竖放条形图绘图原理

Python中绘制竖放条形图需用matplotlib.pyplot中的bar函数,该函数的基本语法为:
bar(x, height, [width], [bottom],  **kwargs)
参数说明:
x:数组,条形图对应的横坐标。
height:一个数或数组,条形图的纵坐标(高度)。
[width]:一个数或数组,条形的宽度,默认值0.8,为可选参数。
[bottom]:一个数或数组,条形的起始高度,默认值0,为可选参数。
**kwargs:不定长关键字参数,用字典形式设置条形图的其它参数。

 2   绘制竖放条形图
以日期为横坐标,收盘价为纵坐标绘制竖放条形图,具体语句如下:
import matplotlib.pyplot as plt           #导入库


date = date.set_index('日期') #把日期列设为索引
date.index = pd.to_datetime(date.index) #把索引转为时间格式
plt.bar(date.index, date['收盘价']) #以日期为横轴,收盘价为纵轴绘制条形图
得到结果如下:

从以上结果可以发现,由于数据较多,条形图密密麻麻,看不出具体趋势。故在绘图之前,最好先进行统计汇总。


 3   优化显示竖放条形图
以时间为横轴,每年收盘价均值为纵轴绘制竖放条形图,并添加标题和轴标签等,具体语句如下:
result = date[['收盘价']].groupby(date.index.year).mean() #计算每年收盘价均值


plt.rcParams['font.sans-serif'] = ['SimHei'] # 解决中文显示问题
plt.rcParams['axes.unicode_minus'] = False # 解决中文显示问题


plt.bar(result.index, result['收盘价'], 0.6, label='close', color='#87CEFA')
plt.legend() #显示图例
plt.xlabel('时间') #x轴标签
plt.ylabel('收盘价') #y轴标签
plt.title('股票收盘价') #标题
得到结果如下:


三、横放条形图
 1   横放条形图绘图原理
Python中绘制横向条形图需用matplotlib.pyplot中的barh函数,该函数和bar函数类似,它的基本语法为:
barh(y, width, [height],  **kwargs)
参数说明:
y:一个数或数组,条形图对应的纵坐标。
width:一个数或数组,条形的宽度。
[height]:一个数或数组,条形的高度,默认值0.8,为可选参数。
**kwargs:不定长关键字参数,用字典形式设置条形图的其它参数。

 2   绘制横放条形图
以时间为纵轴,收盘价为高度绘制横放条形图,具体语句如下:
result = date[['收盘价']].groupby(date.index.year).mean()  #计算每年收盘价均值
plt.barh(result.index, result['收盘价']) #以时间为纵轴,收盘价为高度绘制横向条形图
得到结果如下:


四、并列条形图
有时在绘制条形图时需对比显示某些信息,比如想同时观察股票最高价和最低价的变化趋势,可采用并列条形图,具体语句如下:
result = date.groupby(date.index.year).agg(high=('最高价','mean'), low=('最低价','mean')) #分别计算每年股票最高价、最低价均值
plt.bar(result.index, result['high'], width=0.2, color='r', label='high') #绘制每年股票最高价均值的条形图,颜色设置为红色
plt.bar(result.index+0.2, result['low'], width=0.2, color ='b', label='low') #绘制每年股票最低价均值的条形图,颜色设置为蓝色
plt.xticks(result.index+0.2, result.index) # 让横坐标轴刻度显示时间,result.index+0.2为横坐标轴刻度的位置
plt.ylim(5, 35) #设置y轴的显示范围
plt.title('股票最高价最低价') #设置标题
plt.legend() #显示图例
得到结果如下:


五、叠加条形图
有时一个变量的数值恒小于另一个变量,这时可以把两个条形图绘制到一个条形图中,用不同的颜色显示这两个条形图即可。
比如股票价格的最小值恒小于最大值,可以把这两个数组绘制在同一个条形图中,具体语句如下:
result = date.groupby(date.index.year).agg(high=('最高价','mean'), low=('最低价','mean')) #分别计算每年股票最高价、最低价均值
plt.bar(result.index, result['high'], width=0.2, color='r', alpha=0.5, label='high') #绘制股票最高价条形图,颜色为红色
plt.bar(result.index, result['low'], width=0.2, color='b', alpha=0.5, label='low') #绘制股票最低价条形图,颜色为蓝色
plt.title('叠加股票最高价最低价条形图') #设置标题
plt.legend() #显示图例
得到结果如下:


六、拼接条形图
有时需要把两组数值绘制在同一个条形图中,以股票最高价和最低价为示例,绘制拼接条形图,具体语句如下:
result = date.groupby(date.index.year).agg(high=('最高价','mean'), low=('最低价','mean')) #分别计算每年股票最高价、最低价均值
plt.bar(result.index, result['high'], width=0.2, color='r', label='high') #绘制股票最高价条形图
plt.bar(result.index, result['low'], bottom=result['high'], width=0.2, color='b', label='low') #以股票最高价为起点绘制股票最低价条形图
plt.title('股票最高价最低价拼接条形图') #设置标题
plt.legend() #显示图例
得到结果:



七、多重显示条形图
有时可以把一组数值看成高度,另一组数值代表颜色绘制多重显示条形图。以股票收盘价和换手率为例,绘制多重显示条形图,具体语句如下:
import matplotlib.cm as cm  #导入库


result = date.groupby(date.index.year).agg(avgl=('收盘价', 'mean'), avg2=('换手率', 'mean')) #按年统计股票收盘价和换手率的均值
plt.bar(result.index, result['avgl'], color=cm.ScalarMappable().to_rgba(result['avg2'])) #以收盘价均值为高度,换手率均值为颜色绘制条形图
sm = plt.cm.ScalarMappable(norm=plt.Normalize(vmin=result['avg2'].min(), vmax=result['avg2'].max()))
plt.colorbar(sm) #根据换手率均值的大小显示颜色
plt.title('用收盘价和换手率绘制多重显示条形图') #设置标题
plt.show()
得到结果如下:

至此,在Python中绘制条形图已全部讲解完毕,感兴趣的同学可以自己实现一遍

往期回顾:
520表白代码合集
黑客帝国中的代码雨
用python绘制皮卡丘
娱乐圈排行榜动态条形图绘制
Python人脸识别—我的眼里只有你
3D星空图V2版——添加背景图片和音乐


扫一扫关注我

19967879837

投稿微信号、手机号

文章转载自阿黎逸阳的代码,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论