Python使用matplotlib绘制条形图

我是研究僧i 提交于 2020-01-12 00:04:05

条形图是比较基础的绘图手法之一,接下来将使用matplotlib进行绘图。从简单的条形图到多个系列的条形图到堆叠条形图:

  • 导入必要的包
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

简单的条形图(一个展示序列)

series = np.array([3, 5, 7, 10, 3])
plt.bar(x=list('ABCDE'), height=series, color='tab:green', width=.5)
plt.show()

在这里插入图片描述

绘制横向的条形图

# barh方法实现, 对应的height->width
plt.barh(y=list('abcde'), width=series, height=.5)
plt.show()

在这里插入图片描述

绘制系列条形图

系列数据的绘制可以参考官方示例

示例结果:

在这里插入图片描述

  • 准备两个系列数据
series = np.array([3, 5, 7, 10, 3])
series1 = np.array([3, 5, 9, 11, 3])
labels = list('ABCDE')
x = np.arange(len(labels))
width = 0.35
plt.bar(x-width/2, series, width, label='ser')
plt.bar(x+width/2, series1, width, label='ser1')
plt.legend()
plt.xticks(x, labels)
plt.show()

在这里插入图片描述

堆叠条形图

同样的数据,采样数值堆叠的方式绘图(百分比堆叠可以自行计算后绘制):

labels = list('ABCDE')
x = np.arange(len(labels))
width=0.5
plt.bar(x, series, width, label='ser')
plt.bar(x, series1, width, bottom=series, label='ser1')
plt.legend()
plt.xticks(x, labels)
plt.show()

在这里插入图片描述

利用pandas优雅绘制条形图

pandas绘制基础条形图

基础条形图包含一列数据,我们可以使用pd.Series数据结构来处理,以上面的series为例子:

ser = pd.Series(series, index=list('ABCDE'), name='ser')
color=np.array([183, 222, 232])/255 # 自定义颜色
ser.plot(kind='bar', color=color, rot=0) # rot指定x轴标签方向
plt.legend() # 选择是否显示系列标签
plt.show()

在这里插入图片描述

使用pandas绘制单个系列的条形图还看不出优势,我们可以使用DataFrame数据结构来绘制多个系列的系列条形图和堆叠条形图!

使用pandas绘制系列条形图和堆叠条形图

  • 准备数据
df = pd.DataFrame(np.array([series, series1]).T, index=list('ABCDE'), columns=['ser', 'ser1'])
df
ser ser1
A 3 3
B 5 5
C 7 9
D 10 11
E 3 3
  • 绘制系列条形图
df.plot(kind='bar', rot=0)
plt.show()

在这里插入图片描述

有没有简化很多?同样我们可以横向和堆叠条形图

  • 横向系列条形图
df.plot(kind='barh', rot=0)
plt.show()

在这里插入图片描述

  • 绘制横向堆叠条形图
df.plot(kind='barh', stacked=True, rot=0)
plt.show()

在这里插入图片描述

怎么样!使用pandas之后是不是优雅了很多,如果您喜欢别忘了点赞关注!

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!