【Matplotlib学习笔记(学习地址:阿里云Python学习路线 – 阶段3)】

1、什么是Matplotlib:

(1)Matplotlib:
         mat - matrix(矩阵)
         plot - 画图
         lib - library 库

(2)专门用于开发2D图表(包括3D图表);

(3)使用起来极其简单;

(4)以渐进、交互式方式实现数据可视化

2、画图:

(1)简单尝试绘制一幅图:

import matplotlib.pyplot as plt #导包
%matplotlib inline 

plt.figure() #创建画布
plt.plot([1,0,9],[4,5,6]) #传入横、纵坐标,连线
plt.show()

(2)matplotlib图像结构:

3、Matplotlib三层结构(容器层、辅助显示层、图像层)

(1)容器层Canvas

         1)画板层Figure

         2)画布层

         3)绘图区 / 坐标系

                x 、y轴张成的区域

             (2)辅助显示层(图例、网格这些的东西)

             (3)图像层(就是图表)

容器层:

辅助显示层:

图像层:

图像层指Axes内通过plot、scatter、bar、histogram、pie等函数根据数据绘制出的图像。

4、折线图绘制与保存图片

(1)matplotlib.pyplot模块

import matplotlib.pyplot as plt

 matplotlib.pyplot包含了一系列类似于matlab的画图函数。它的函数作用于当前图形(figure)的当前坐标系(axes)。

(2)折线图绘制与显示

展示上海一周的天气:

# 1、创建画布(容器层)
plt.figure()
# 2、绘制折线图(图像层)
plt.plot([1,2,3,4,5,6,7] , [17,17,18,15,11,11,13])
# 3、显示图像
plt.show()

(3)设置画布属性与图片保存

plt.figure(figsize=(), dpi=)
    figsize:指定图的长宽
    dpi:图像的清晰度
    返回fig对象
plt.savefig(path)
# 1、创建画布(容器层)
plt.figure(figsize=(20,8), dpi=80)
# 2、绘制折线图(图像层)
plt.plot([1,2,3,4,5,6,7] , [17,17,18,15,11,11,13])
# 3、显示图像
plt.show()

注意:要先保存图像、再显示图像

 (4)完善原始折线图1(辅助显示层)

1)原始图像:

需求:画出某城市11点到12点 1h内 每分钟的温度变化折线图,温度范围再15° - 18°

原始代码及图像:

# 1、准备数据 x、y
import random
x = range(60)
y_shanghai = [random.uniform(15,18) for i in x]

# 2、创建画布
plt.figure(figsize=(10,8),dpi=80)

# 3、绘制图像
plt.plot(x,y_shanghai)

# 4、显示图像
plt.show()

2)添加自定义x、y刻度

# 1、准备数据 x、y
import random
x = range(60)
y_shanghai = [random.uniform(15,18) for i in x]

# 2、创建画布
plt.figure(figsize=(10,8),dpi=80)

# 3、绘制图像
plt.plot(x,y_shanghai)

# 修改x、y刻度
# 准备x的刻度说明
x_lable = ['11.{}'.format(i) for i in x]
plt.xticks(x[::5], x_lable[::5])
plt.yticks(range(0,40,5))

# 4、显示图像
plt.show()

3)添加网格显示 

 

plt.grid(True, linestyle='--', alpha=0.5)

True : 是否添加网格(是)

linestyle : 线条风格

alpha :透明度

4)添加描述信息(x轴、y轴描述信息 及 标题)

plt.xlabel('time')
plt.ylabel('temperature')
plt.title('Temperature variation diagram')
# 1、准备数据 x、y
import random
x = range(60)
y_shanghai = [random.uniform(15,18) for i in x]

# 2、创建画布
plt.figure(figsize=(10,8),dpi=80)

# 3、绘制图像
plt.plot(x,y_shanghai)

# 修改x、y刻度
# 准备x的刻度说明
x_lable = ['11.{}'.format(i) for i in x]
plt.xticks(x[::5], x_lable[::5])
plt.yticks(range(0,40,5))

# 添加网格显示
plt.grid(True, linestyle='--', alpha=0.5)

# 添加描述信息
plt.xlabel('time')
plt.ylabel('temperature')
plt.title('Temperature variation diagram')

# 4、显示图像
plt.show()

(5)完善原始折线图2(图像层) 【再添加一个城市的温度变化】

1)图形风格:

2)图例位置:

plt.legend(loc = 'best')

3)修改代码如下:

import random
x = range(60)
y_shanghai = [random.uniform(15,18) for i in x]
y_beijing = [random.uniform(1,3) for i in x]

# 2、创建画布
plt.figure(figsize=(10,8),dpi=80)

# 3、绘制图像
plt.plot(x,y_shanghai, color = 'r' , linestyle = '--' , label = 'shanghai')
plt.plot(x,y_beijing , color = 'b' , label = 'beijing')

# 显示图例
plt.legend()

# 修改x、y刻度
# 准备x的刻度说明
x_lable = ['11.{}'.format(i) for i in x]
plt.xticks(x[::5], x_lable[::5])
plt.yticks(range(0,40,5))

# 添加网格显示
plt.grid(True, linestyle='--', alpha=0.5)

# 添加描述信息
plt.xlabel('time')
plt.ylabel('temperature')
plt.title('Temperature variation diagram')

# 4、显示图像
plt.show()

(6)多个坐标系显示-plt.subplots(面向对象的画图方法) 

import random
x = range(60)
y_shanghai = [random.uniform(15,18) for i in x]
y_beijing = [random.uniform(1,3) for i in x]

# 2、创建画布
# plt.figure(figsize=(10,8),dpi=80)
figure , axes = plt.subplots(nrows=1,ncols=2,figsize=(10,8),dpi=80)

# 3、绘制图像
axes[0].plot(x,y_shanghai, color = 'r' , linestyle = '--' , label = 'shanghai')
axes[1].plot(x,y_beijing , color = 'b' , label = 'beijing')

# 显示图例
axes[0].legend()
axes[1].legend()

# 修改x、y刻度
# 准备x的刻度说明
x_label = ['11.{}'.format(i) for i in x]
axes[0].set_xticks(x[::5])
axes[0].set_xticklabels(x_label[::5])
axes[0].set_yticks(range(0,40,5))
axes[1].set_xticks(x[::5])
axes[1].set_xticklabels(x_label[::5])
axes[1].set_yticks(range(0,40,5))

# 添加网格显示
axes[0].grid(True, linestyle='--', alpha=0.5)
axes[1].grid(True, linestyle='--', alpha=0.5)

# 添加描述信息
axes[0].set_xlabel('time')
axes[0].set_ylabel('temperature')
axes[0].set_title('Temperature variation diagram of shanghai')
axes[1].set_xlabel('time')
axes[1].set_ylabel('temperature')
axes[1].set_title('Temperature variation diagram of beijing')

# 4、显示图像
plt.show()

(7)折线图的应用场景

某事物、某指标随时间的变化状况;也可以画数学函数图像

5、散点图(scatter)

(1)散点图应用场景

判断变量之间是否存在数量关联趋势,展示离群点(分布规律)

(2)散点图绘制

# 1、准备数据
x = [1,2,3,4,5,6,7,8,9,10]
y = [10,9,8,7,6,5,4,3,2,1]
# 2、创建画布
plt.figure(figsize=(20,8),dpi=80)
# 3、绘制图形
plt.scatter(x,y)
# 4、显示图像
plt.show()

 

6、柱状图(bar)

(1)柱状图应用场景

绘制离散的数据,能一眼看出各个数据的大小,比较数据之间的差别。(统计/对比)

(2)柱状图绘制

1)单纯的统计:

 

# 1、准备数据
name = ['AAA' , 'BBB' , 'CCC' , 'DDD' , 'EEE']
nums = [123 , 136 , 129 , 101 , 121]

# 2、创建画布
plt.figure(figsize=(20,8),dpi=80)

# 3、绘制柱状图
x_ticks = range(len(name))
plt.bar(x_ticks,nums,color=['b','r','g','c','m'])

# 修改x刻度
plt.xticks(x_ticks,name)

# 添加标题
plt.title('Film revenue')

# 添加网格
plt.grid(linestyle='--',alpha=0.5)

# 4、显示图像
plt.show()

2)对比:

# 1、准备数据
movie_name = ['AAA' , 'BBB' , 'CCC']

first_day = [10000,15000,20000]
first_weekend = [30000,35000,40000]

# 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_weekend,width=0.2,label='首周票房')

# 显示图例
plt.legend()

# 4、修改刻度
plt.xticks([0.1,1.1,2.1],movie_name)

# 4、显示图像
plt.show()

 

7、直方图(histogram)

(1)直方图应用场景

绘制连续性的数据展示一组或者多组数据的分布情况。(统计)

(2)相关概念

组数:在统计数据时,我们把数据按照不同的范围分成几个组,分成的组的个数称为组数;

组距:每一组两个端点的差;

直方图是连着的,柱状图是分开的;

直方图展示数据的分布,柱状图比较数据的大小;

直方图x轴位定量数据,柱状图x轴为分类数据;

直方图柱子宽度可不一,柱状图柱子宽度必须一致;

(3)直方图绘制

组数 = 极差 // 组距

 y轴的变量,可以是频数,也可以是频率

plt.hist(time,bins=group_num,density=True)
# 需求:电影时长分布状况
# 1、准备数据
time = [131,98,125,131,124,139,131,117,128,108 ]

# 2、创建画布
plt.figure(figsize=(20,8),dpi=80)

# 3、绘制直方图
distance = 2
group_num = (max(time) - min(time)) // distance
plt.hist(time,bins=group_num)

# 修改x轴刻度
plt.xticks(range(min(time),max(time),distance))

# 添加网格
plt.grid(linestyle='--',alpha=0.5)

# 4、显示图像
plt.show()

 

 

8、饼图(pie)

(1)饼图应用场景

分类数据的占比情况。(占比)

(2)绘制饼图

 

 

# 1、准备数据
movie_name = ['A','B','C','D']
place_count = [10,20,30,40]

# 2、创建画布
plt.figure(figsize=(20,8),dpi=80)

# 3、绘制饼图
plt.pie(place_count,labels=movie_name,colors = ['r','m','b','g'],autopct='%1.2f%%')

# 显示图例
plt.legend()

plt.axis('equal')

# 4、显示图像
plt.show()

 

9、总结

 

 


版权声明:本文为The_friends原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
THE END
< <上一篇
下一篇>>