Matplotlib使用

做~自己de王妃 提交于 2019-12-02 12:28:23

Matplotlib

1)什么是Matplotlib

  • 是专门用于开发2D、3D图表
  • 以渐进、交互式方式实现数据可视化

2)Matplotlib的特征

可视化是在整个数据挖掘的关键辅助工具,可以清晰的理解数据,从而调整我们的分析方法。

  • 能将数据进行可视化,更直观的呈现
  • 使数据更加客观、更具有说服力

3)实现一个简单的Matplotlib画图

3.1 matplotlib.pyplot模块

matplotlib.pytplot包含了一系列类似于matlab的画图函数。

import matplotlib.pyplot as plt

3.2 图形绘制流程

1.创建画布 -- plt.figure()

plt.figure(figsize=(), dpi=)
    figsize:指定图的长宽
    dpi:图像的清晰度
    返回fig对象
2.绘制图像 -- plt.plot(x, y)

以折线图为例
3.显示图像 -- plt.show()

3.3.折线图绘制与显示

例如:展示北京一周的天气温度变化

import matplotlib.pyplot as plt

# 1.创建画布
plt.figute(figsize=(20,8),dpi=100)


# 2.绘制折线图
plt.plot([1,2,3,4,5,6,7],[18,20,16,15,22,17,22])

# 3.显示图像
plt.show()

4)基础绘图功能

1.完善原始折线图 — 给图形添加辅助功能

需求:画出某城市11点到12点之间每分钟的温度变化折线图,温度范围在15~18度之间

import magplotlib.pyplot as plt
import random

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

plt.figure(figsize=(20,8),dpi=80)
plt.plot(x,y_beijing)

plt.show()

2.添加自定义x,y刻度

  • plt.xticks(x,**kwargs)

    x:要显示的刻度值

  • plt.yticks(y,**kwargs)

    y:要显示的刻度值

# 增加以下两行代码

# 构造x轴刻度标签
x_ticks_label = ["11点{}分".format(i) for i in x ]
# 构造y轴刻度
y_ticks = range(40)

# 修改x,y轴刻度显示
plt.xticks(x[::5],x_tiks_label[::5])
plt.yticks(y_ticks[::5])

3.添加网格显示
plt.grid(True,linestyle='--',alpht=0.5)
# True为显示网格
# linestyle 线条格式
# alpha 透明度
4.添加描述信息
# 添加x轴,y轴描述信息及标题
plt.xlabel("时间")
plt.ylabel("温度")
plt.title("中午11点-12点之间的温度变化情况",fontsize=15)
5.图像保存
# 保存图片到指定路径
plt.savefig('demo1.png')
  • 注意:保存图片要在plt.show()之前,因为plt.show()会释放资源。

完整代码实现:

import matplotlib.pyplot as plt
import random

x = range(60)
y_beijing = [random.unifomt(15,18) for i in x ]
y_ticks= range(40)

x_ticks_label = ['11点{}分'.format(i) for i in x]
y_ticks_label = ['{}度'.format(i) for i in y]

plt.figure(fontsize = (20,8),dpi = 100)

plt.plot(x,y_beijing)
plt.xticks(x[::5],x_ticks_label[::5])
plt.yticks(y_ticks[::5],y_ticks_label[::5])

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

plt.xlabel("时间")
plt.ylabel("温度")
plt.title("中午11点-12点北京温度变化图",fontsize=20)

plt.savefig("demo2.png")

plt.show()

如需在同一个坐标系中绘制多个图像

# 只需要在构造数据之后在plot即可
y_shanghai = [random.uniform(10,13) for i in x ]

plt.plot(x,y_beijing)

plt.plot(x,y_shanghai,color='r',linestyle='--')
6.显示图例
plt.plot(x,y_beijing,label='北京')
plt.plot(x,y_shanghai,color='r',linestyle='--',label='上海')

plt.legend(loc='best')
7.多个坐标系显示—plt.subplots

如果我们想要将上海和北京的天气图显示在同一个图的不同坐标系当中

可以通过subplot函数实现

  • matplotlib.pyplot.subplots(norws=1, ncols=1 ,**fig_kw)创建一个带有多个axs(坐标系/绘图区)的图形

    Parameters:    
    
    nrows, ncols : 设置有几行几列坐标系
        int, optional, default: 1, Number of rows/columns of the subplot grid.
    
    Returns:    
    fig : 图对象
    axes : 返回相应数量的坐标系
    
    设置标题等方法不同:
        set_xticks
        set_yticks
        set_xlabel
        set_ylabel
    

    注意:**plt.函数名()**相当于面向过程的画图方法,**axes.set_方法名()**相当于面向对象的画图方法。

    # 准备数据
    x = range(60)
    y_shanghai = [random.uniform(15,18) for i in x ]
    y_beijing = [random.uniform(1,5) for i in x ]
    
    # 创建画布
    fig, axec = plt.subplots(norws=1, ncols=2, figsize=(20,8),dpi=100)
    
    # 绘制图像
    axes[0].plot(x, y_shanghai, label="上海")
    axes[1].plot(x, y_beijing, color="r", linestyle="--", label="北京")
    
    # 添加x,y轴刻度
    x_ticks_label = ["11点{}分".format(i) for i in x]
    y_ticks = range(40)
    
    # 刻度显示
    axes[0].set_xticks(x[::5])
    axes[0].set_yticks[y_ticks[::5]]
    axes[0].set_xtickslabel(x_ticks_label[::5])
    axes[1].set_xticks(x[::5])
    axes[1].set_yticks(y_ticks[::5])
    axes[1].set_xticklabels(x_ticks_label[::5])
    
    # 添加描述信息
    axes[0].set_xlabel("时间")
    axes[0].set_ylabel("温度")
    axes[0].set_title("中午11点--12点某城市温度变化图", fontsize=20)
    axes[1].set_xlabel("时间")
    axes[1].set_ylabel("温度")
    axes[1].set_title("中午11点--12点某城市温度变化图", fontsize=20)
    
    # 图像保存
    plt.savefig("demo3.png")
    
    # 添加图例
    axes[0].legend(loc=0)  # 和loc='best'一样
    axes[1].legend(loc=0)
    
    # 显示图像
    plt.show()
    
8.折线图的应用场景
  • 呈现公司产品(不同区域)每天活跃用户数

  • 呈现app每天下载数量

  • 呈现产品新功能上线后,用户点击次数随时间的变化

  • 拓展:画各种数学函数图像

    • 注意:plt.plot()除了可以画折线图,也可以用于画各种数学函数图像
    import numpy as np
    
    x = np.linspance(-10,10,1000)
    y = np.sin(x)
    
    plt.figure(figsize=(20,8),dpi=100)
    
    plt.plot(x,y)
    plt.grid
    
    plt.show()
    

5)常见图形绘制

Matplotlib能够绘制折线图、散点图、柱状图、直方图、饼图。

1.常见图形种类及意义
  • 折线图:以折线上升或下降来表示统计数量的增减变化的统计图

    特点:能够显示数据的变化趋势,反应事物的变化情况。(变化)

    api : plt.plot(x,y)

  • 散点图:用两组数据构成多个坐标点,考察坐标点的分布,判断两变量之间是否存在某种关联或总结坐标点的分布模式。

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

    api : plt.scatter(x,y)

  • 柱状图:排列在工作表的列或行中的数据可以绘制到柱状图中

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

    api : plt.bar(x,width,align=‘center’,**kwargs)

    Parameters:    
    x : 需要传递的数据
    
    width : 柱状图的宽度
    
    align : 每个柱状图的位置对齐方式
        {‘center’, ‘edge’}, optional, default: ‘center’
    
    **kwargs :
    color:选择柱状图的颜色
    
  • 直方图:由一系列高度不等的纵向条纹或线段表示数据的分布情况。一般用横轴表示数据范围,纵轴表示分布情况。

    特点:绘制连续性的数据展示一组或多组数据的分布状况**(分布状况)**

    api : plt.hist(x,bins=None)

    Parameters:    
    x : 需要传递的数据
    bins : 组距
    
  • 饼图:用于表示不同分类的占比情况,通过弧度大小来对比各种分类

    特点:分类数据的占比情况(占比)

    api : plt.pie(x,labels=,autopct=,colors=,

    Parameters:  
    x:数量,自动算百分比
    labels:每部分名称
    autopct:占比显示指定%1.2f%%
    colors:每部分颜色
    
2.柱状图绘制
movie_name = ['雷神3:诸神黄昏','正义联盟','东方快车谋杀案','寻梦环游记','全球风暴','降魔传','追捕','七十七天','密战','狂兽','其它']

x = range(len(movie_name))

y = [73853,57767,22354,15969,14839,8725,8716,8318,7916,6764,52222]

plt.figure(figsize=(20,8),dpi=100)

plt.bar(x,y,width=0.5,color=['b','r','g','y','c','m','y','k','c','g','b'])

plt.xticks(x,movie_name)

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

# 2.3 添加标题
plt.title("电影票房收入对比")

# 3.显示图像
plt.show()

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!