一、Matplotlib三层结构
- 容器层
- 画板层(Canvas)
- 画布层(Figure):plt.figure()
- 绘图区/坐标系(Axes):plt.subplots()
- 辅助显示层
- 坐标(axis)、图例(legend)等
- 图像层
二、常见图表
- 折线图 plot
- 散点图 scatter
- 柱状图 bar
- 直方图 histogram
- 饼状图 pie
三、折线图(plot)与基础绘制功能
- 单个绘图区画两条折线
import matplotlib.pyplot as plt
import random
#导入库
%matplotlib inline
#环境
#1、准备数据
x = range(60)
y = [random.uniform(15,18) for i in x]
y1 = [random.uniform(1,3) for i in x]
# 2、创建画布(容器层)
plt.figure(figsize=(20,8),dpi=80)
# figsize:指定图的长宽
# dpi:图像的清晰度
# 3、绘制折线图(图像层)
plt.rcParams['font.sans-serif'] = 'SimHei' # 设置字体
plt.rcParams['axes.unicode_minus']= False # 字符显示
plt.plot(x,y,color = 'r',linestyle= '--',label='城市1')
plt.plot(x,y1,color = 'b',label='城市2')
# color:颜色,r红色,g绿色,b蓝色,w白色,c青色,m洋红等
# linestyle:线条风格,-实线,--虚线,-.点划线,:点虚线,''留空、空格
#显示图例
plt.legend(loc='best')
# loc:图例位置
# 修改x的刻度
# 准备x的刻度说明
x_label = ['11时{}分'.format(i) for i in x]
plt.xticks(range(0,61,5),x_label[::5])
# 修改y的刻度
plt.yticks(range(0,40,5))
# range(0,40,5) 0到40每隔5步,或者写为range(40)[::5]
# 添加网格
plt.grid(True,linestyle='--',alpha=0.5)
# 是否添加网格,默认True/线条风格/透明度
# 添加描述信息
plt.xlabel('时间变化')
plt.ylabel('温度变化')
plt.title('某两个城市温度变化时间图')
#保存图像
plt.savefig('test')
#注意:plt.show()会释放figure资源,如果在显示图像之后保存图片将只能保存空图片
# 4、显示图像
plt.show()
- 多个绘图区画折线
import matplotlib.pyplot as plt
import random
#导入库
%matplotlib inline
#环境
#1、准备数据
x = range(60)
y = [random.uniform(15,18) for i in x]
y1 = [random.uniform(1,3) for i in x]
# 2、创建画布(容器层)
figure,axes = plt.subplots(nrows=1,ncols=2,figsize=(20,8),dpi=80)
# nrows/ncols:绘图区行/列
# figsize:指定图的长宽
# dpi:图像的清晰度
#返回两个对象:figure图对象,ax设置
# 3、绘制折线图(图像层)
plt.rcParams['font.sans-serif'] = 'SimHei' # 设置字体
plt.rcParams['axes.unicode_minus']= False # 字符显示
axes[0].plot(x,y,color = 'r',linestyle= '--',label='城市1')
axes[1].plot(x,y1,color = 'b',label='城市2')
# color:颜色,r红色,g绿色,b蓝色,w白色,c青色,m洋红等
# linestyle:线条风格,-实线,--虚线,-.点划线,:点虚线,''留空、空格
#显示图例
axes[0].legend(loc='best')
axes[1].legend()
# loc:图例位置
# 修改x,y的刻度
# 准备x、y的刻度说明
x_label = ['11时{}分'.format(i) for i in x]
axes[0].set_xticks(range(0,61,5))
axes[0].set_yticks(range(0,40,5))
axes[1].set_xticks(range(0,61,5))
axes[1].set_yticks(range(0,40,5))
# Axes.set_xticks()只有两个参数,无法设置标注,因此用下述方法
axes[0].set_xticklabels(x_label[::5])
axes[1].set_xticklabels(x_label[::5])
# range(0,40,5) 0到40每隔5步,或者写为range(40)[::5]
# 添加网格
axes[0].grid(True,linestyle='--',alpha=0.5)
axes[1].grid(True,linestyle='--',alpha=0.5)
# 是否添加网格,默认True/线条风格/透明度
# 添加描述信息
axes[0].set_xlabel('时间变化')
axes[0].set_ylabel('温度变化')
axes[0].set_title('某城市1温度变化时间图')
axes[1].set_xlabel('时间变化')
axes[1].set_ylabel('温度变化')
axes[1].set_title('某城市2温度变化时间图')
#保存图像
plt.savefig('test1')
#注意:plt.show()会释放figure资源,如果在显示图像之后保存图片将只能保存空图片
# 4、显示图像
plt.show()
四、柱状图(bar)
import matplotlib.pyplot as plt
# 1、准备数据
movie_names = ['电影1','电影2','电影3','电影4','电影5','电影6','电影7','电影8','电影9','电影10','电影11']
tickets = [12312,23423,43653,95984,39123,83829,12345,40222,29840,73636,63873]
# 2、创建画布
plt.figure(figsize=(20,8),dpi=80)
# 3、绘制柱状图
x_ticks = range(len(movie_names))
plt.bar(x_ticks,tickets,color=['r','k','y','g','c','b','g','k','c','m','c'])
# 修改x刻度
plt.xticks(x_ticks,movie_names)
# 添加标题
plt.title('电影票房收入对比')
# 4、显示图像
plt.show()
import matplotlib.pyplot as plt
# 1、准备数据
movie_names = ['电影1','电影2','电影3']
first_day = [12312,23423,43653]
first_week = [80938,84737,90283]
# 2、创建画布
plt.figure(figsize=(20,8),dpi=80)
# 3、绘制柱状图
plt.bar(range(3),first_day,width=0.2,label='首日票房')
plt.bar([0.2, 1.2, 2.2],first_week,width=0.2,label='首周票房')
# 显示图例
plt.legend()
# 修改x刻度
plt.xticks([0.1,1.1,2.1],movie_names)
# 添加标题
plt.title('电影票房收入对比')
# 4、显示图像
plt.show()
五、饼状图api
- 注意显示的百分比的位数
- plt.pie(x,labels=,autopct=,colors=)
- x:数量,自动算百分比
- labels:每部分名称
- autopct:占比显示指定’%1.2f%%’
- colors:每部分颜色
- 为了让显示的饼图保持圆形,需要添加axis保证长宽一样
- plt.axis(‘equal’)
六、直方图api
- plt.hist(x,bins=,normed=,color=)
- x:数据、数量
- bins:组数
- normed:参数指定密度,也就是每个条状图的占比例比,默认为1