近期有同学说,关于matplotlib的使用,总是有些不太顺畅,问有没有一定的操作流程呢?所以,这里就结合实例做一个总结,希望能够给大家些帮助。
阅读路线:
- 观察所用数据
- matplotlib.plot的基础绘图流程
- 画图举例
- 共享 X 轴举例
0:观察所用数据
import pandas as pd
import numpy as np
date=["2019-03-01","2019-03-02","2019-03-03","2019-03-04","2019-03-05","2019-03-06","2019-03-07","2019-03-08","2019-03-09","2019-03-10"]
amount=[10962.32,11033.15,9776.22,15936.61,17591.2,21197.75,19439.5,17585.33,10189.79,13799.21]
people_num=[139,201,117,265,225,236,283,431,259,238]
avg_amount=[78.87,54.89,83.56,60.14,78.18,89.82,68.69,40.8,39.34,57.98]
df_sales=df_sales[["date","amount","people_num","avg_amount"]]
df_sales=pd.DataFrame({"date":date,"amount":amount,"people_num":people_num,"avg_amount":avg_amount})
上述的数据主要为某淘宝店铺的每天销售数据,每天的购买人数,每天的客单价(虚构)
二:matplotlib.plot的基础绘图流程
1.创建画布(选择是否绘制子图,指定画布大小,像素)
p1 = plt.figure(figsize=(8,6),dpi=144)
axes = p1.add_subplot(2,1,1)
2.添加标题--添加x轴的名称,刻度与范围--添加y轴的名称,刻度与范围
plt.title('标题')
plt.xlabel('x')
plt.ylabel('y')
plt.xlim((0,1))
plt.ylim((0,1))
plt.xticks([0,1,2,3,4])
plt.yticks([0,1,2,3,4])
plt.legend(['a','b'])
3.绘制图形,设置图形的样式,颜色,背景,并添加图例
3.1 调节字体显示为中文:
mpl.rcParams['font.sans-serif']='SimHei'
mpl.rcParams['axes.unicode_minus']=False
3.2 绘制图形
axes.plot(df["col1"],df["col2"])
4.保存图形,显示图形
plt.show()
plt.savefig("sales_20190421.jpg")
三:画图举例
import matplotlib.pyplot as plt
p1 = plt.figure(figsize=(3,2),dpi=144)
layer1 = p1.add_subplot(1,1,1)
plt.title('某淘宝店铺的营业额情况')
plt.xlabel('日期')
plt.ylabel('营业额')
plt.xticks(rotation=25)
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False
layer1.plot(df_sales["date"],df_sales["amount"])
plt.show()
plt.savefig("sales_20190421.jpg")
画图的流程都是参考第二部分所讲述的内容,图形如下:
但是如果我们也想把客单价表现在图上怎么办呢,其实只需要加上一行代码即可
但是表现怎么样呢?
这样来看效果确实不怎么好呢,因为营业额和客单价差着好几百倍呢,在同一个Y轴上反映不出客单价随时间的变化。下面我们来通过共享X 轴,表现在两个Y轴上试试
四:共享 X 轴举例
我们接着看下代码
import matplotlib.pyplot as plt
p1 = plt.figure(figsize=(3,2),dpi=144)
layer1 = p1.add_subplot(1,1,1)
plt.title('某淘宝店铺的营业额情况')
plt.xlabel('日期')
plt.ylabel('营业额')
plt.xticks(rotation=25)
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False
layer1.plot(df_sales["date"],df_sales["amount"],c='b',linestyle=':',marker='o')
layer2 =layer1.twinx()
layer2.plot(df_sales["date"],df_sales["avg_amount"],c='g', linestyle='-.', marker='o')
layer2.set_ylabel('客单价')
plt.show()
plt.savefig("sales_20190421.jpg")
看效果
放在两个轴显示营业额和客单价确实能够体现出客单价随时间的变化了
接下来我们显示出图例
显示效果为
参考连接:
1.Python笔记--Matplotlib及seaborn绘图基础
2.【Python】matplotlib 双y轴绘制及合并图例