条形图是比较基础的绘图手法之一,接下来将使用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之后是不是优雅了很多,如果您喜欢别忘了点赞关注!
来源:CSDN
作者:码码的哈士奇
链接:https://blog.csdn.net/qq_35189715/article/details/103824994