一文学会matplotlib绘图
2019-04-21 本文已影响58人
数据蛙datafrog
近期有同学说,关于matplotlib的使用,总是有些不太顺畅,问有没有一定的操作流程呢?所以,这里就结合实例做一个总结,希望能够给大家些帮助。
阅读路线:
- 观察所用数据
- matplotlib.plot的基础绘图流程
- 画图举例
- 共享 X 轴举例
0:观察所用数据
import pandas as pd
import numpy as np
#10天的日期
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行1列的子图,绘制第1张子图
2.添加标题--添加x轴的名称,刻度与范围--添加y轴的名称,刻度与范围
plt.title('标题') #添加标题
plt.xlabel('x') #添加x轴的名称
plt.ylabel('y') #添加y轴的名称
plt.xlim((0,1)) #x轴刻度范围
plt.ylim((0,1)) #y轴刻度范围
plt.xticks([0,1,2,3,4]) #x轴的刻度值
plt.yticks([0,1,2,3,4]) #y轴的刻度值
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 #plt用于显示图片
#1.创建画布
p1 = plt.figure(figsize=(3,2),dpi=144) #设置画布大小及分辨率
layer1 = p1.add_subplot(1,1,1) #创建一个2行1列的子图,绘制第1张子图
#2.添加标题--添加x轴的名称,刻度与范围--添加y轴的名称,刻度与范围
plt.title('某淘宝店铺的营业额情况') #添加标题
plt.xlabel('日期') #添加x轴的名称
plt.ylabel('营业额') #添加y轴的名称
plt.xticks(rotation=25)#添加旋转角度
#3.绘制图形,设置图形的样式,颜色,背景,并添加图例
#3.1调节字体显示为中文:
mpl.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
mpl.rcParams['axes.unicode_minus'] = False
#3.2绘制图形
layer1.plot(df_sales["date"],df_sales["amount"])
#4.保存图形,显示图形
plt.show()
plt.savefig("sales_20190421.jpg")
画图的流程都是参考第二部分所讲述的内容,图形如下:
但是如果我们也想把客单价表现在图上怎么办呢,其实只需要加上一行代码即可
但是表现怎么样呢?
这样来看效果确实不怎么好呢,因为营业额和客单价差着好几百倍呢,在同一个Y轴上反映不出客单价随时间的变化。下面我们来通过共享X 轴,表现在两个Y轴上试试
四:共享 X 轴举例
我们接着看下代码
import matplotlib.pyplot as plt #plt用于显示图片
#1.创建画布
p1 = plt.figure(figsize=(3,2),dpi=144) #设置画布大小及分辨率
layer1 = p1.add_subplot(1,1,1) #创建一个2行1列的子图,绘制第1张子图
#2.添加标题--添加x轴的名称,刻度与范围--添加y轴的名称,刻度与范围
plt.title('某淘宝店铺的营业额情况') #添加标题
plt.xlabel('日期') #添加x轴的名称
plt.ylabel('营业额') #添加y轴的名称
plt.xticks(rotation=25)#添加旋转角度
#3.绘制图形,设置图形的样式,颜色,背景,并添加图例
#3.1调节字体显示为中文:
mpl.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
mpl.rcParams['axes.unicode_minus'] = False
#3.2绘制图形
layer1.plot(df_sales["date"],df_sales["amount"],c='b',linestyle=':',marker='o') # 加上了线条的样式作为区别
layer2 =layer1.twinx() #------------------------------------------共享X轴
layer2.plot(df_sales["date"],df_sales["avg_amount"],c='g', linestyle='-.', marker='o') # 加上了线条的样式作为区别
layer2.set_ylabel('客单价')
#4.保存图形,显示图形
plt.show()
plt.savefig("sales_20190421.jpg")
看效果
放在两个轴显示营业额和客单价确实能够体现出客单价随时间的变化了
接下来我们显示出图例
显示效果为
参考连接:
1.Python笔记--Matplotlib及seaborn绘图基础
2.【Python】matplotlib 双y轴绘制及合并图例