一文学会Matplotlib数据可视化

Matplotlib是Python最常使用的数据可视化库, 本文通过具体案例, 学会Python的Matplotlib库绘图使用.

希望通过不断迭代补充, 做到一文从入门到精通Matplotlib.

目录

1, 入门基本语法

2, 完善原始折线图

3, 一个坐标系绘制两根折线

4, 多个坐标系绘图

5, 绘制函数图像

6, 总结及问题解决


1, 入门基本语法

语法点:

  1. 创建画布
    figure()
  2. 绘制图像
    plot()
  3. 显示图像
    show()

示例1: 输出一周7天气温变化折线图

示例1: Matplotlib基本作图
# 导入工具库
import matplotlib.pyplot as plt

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

# 2, 绘制图像
plt.plot([1, 2, 3, 4, 5, 6 ,7], [20,22,18,19,17,21,23])

# [3], 保存图像
plt.savefig("./result1.jpg")

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

2, 完善原始折线图

语法点:

  1. 设置坐标轴及标题文字
    xlabel()/ylabel()
  2. 自定义坐标轴刻度
    xticks()/yticks()
  3. 设置图片网格
    grid()

示例2:画出11点到12点1小时内每分钟的温度变化折线图,温度范围在18度~20度之间

示例2: 设置图像​​​
# 需求:画出11点到12点1小时内每分钟的温度变化折线图,温度范围在18度~20度之间

import random
import matplotlib.pyplot as plt
minute = range(60)
# help(random.uniform)
tempreture = [random.uniform(18,20) for i in x]

# 1,创建画布
plt.figure(figsize=(20,8))

# 2,绘制图像
plt.plot(minute,tempreture)

# 添加图像描述信息
# (1)坐标轴文字及标题
plt.xlabel("时间",fontsize=20)
plt.ylabel("温度",fontsize=20)
plt.title("温度随分钟时间变化折线图",fontsize=25)
# (2)坐标轴刻度
x_tick_label = ["11点{}分".format(i) for i in minute]
plt.xticks(x[::5],x_tick_label[::5],rotation=60)
y_tick_label=range(30)
plt.yticks(y_tick_label[::5])
# (3)网格线
plt.grid(linestyle="-",alpha=0.7)

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

 

3, 一个坐标系绘制两根折线

语法点:

  1. 图例: legend(loc="位置")
  2. 多根折线显示在一个图像: 多条plot(,,label="折线标签")

示例3:画出11点到12点1小时内每分钟的温度变化折线图,北京温度范围在17度~20度之间, 深圳在25度~29度之间

示例3: 多条折线显示在一个图像
# 需求:画出11点到12点1小时内每分钟的温度变化折线图,北京温度范围在17度~20度之间, 深圳在25度~29度之间

import matplotlib.pyplot as plt
import random

#0, 准备数据
minute = range(60)

y_beijing = [random.uniform(17,20) for i in minute]
y_shenzhen = [random.uniform(25,29) for i in minute]

#1, 创建画布
plt.figure(figsize=(20,8))

#2, 绘制图像
plt.plot(x,y_beijing,label="北京地区")
plt.plot(x,y_shenzhen,label="深圳地区")


#3, 设置图像
# (1) 设置轴标题,总标题
plt.xlabel('时间',fontsize=20)
plt.ylabel('温度',fontsize=20)
plt.title("温度变化折线图",fontsize=25)

# (2) 设置刻度,刻度标签
x_tick_label = ['11点{}分'.format(i) for i in minute]
y_tick = range(40)
plt.xticks(x[::5],x_tick_label[::5])
plt.yticks(y_tick[::5])

# (3) 设置网格线
plt.grid(linestyle='--',alpha=0.7)

# (4) 设置图例
plt.legend(loc="upper right")

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

4, 多个坐标系绘图

语法点:

  • plt.subplots(nrows=坐标系行个数,ncols=列个数,figsize=(大小))

示例4: 如果我们想要将北京和深圳的天气图显示在同一个图的不同坐标系当中

示例4: 一个图像绘制多个坐标系
# 如果我们想要将北京和深圳的天气图显示在同一个图的不同坐标系当中
import matplotlib.pyplot as plt
import random

#0, 准备数据
minute = range(60)

y_beijing = [random.uniform(17,20) for i in minute]
y_shenzhen = [random.uniform(25,29) for i in minute]

#1, 创建画布
# plt.figure(figsize=(20,8))
fig,ax = plt.subplots(nrows=1,ncols=2,figsize=(20,8))

#2, 绘制图像
# plt.plot(x,y_beijing,label="北京地区")
# plt.plot(x,y_shenzhen,label="深圳地区")
ax[0].plot(minute,y_beijing,label='北京地区')
ax[1].plot(minute,y_shenzhen,label='深圳地区',color='r')

#3, 设置图像
# (1) 设置轴标题,总标题描述信息
# plt.xlabel('时间',fontsize=20)
# plt.ylabel('温度',fontsize=20)
# plt.title("温度变化折线图",fontsize=25)
ax[0].set_xlabel('时间',fontsize=20)
ax[0].set_ylabel('温度',fontsize=20)
ax[0].set_title("温度变化折线图",fontsize=25)
ax[1].set_xlabel('时间',fontsize=20)
ax[1].set_ylabel('温度',fontsize=20)
ax[1].set_title("温度变化折线图",fontsize=25)

# (2) 设置刻度,刻度标签
x_tick_label = ['11点{}分'.format(i) for i in minute]
y_tick = range(40)
# plt.xticks(x[::5],x_tick_label[::5])
# plt.yticks(y_tick[::5])
ax[0].set_xticks(x[::5])
ax[0].set_xticklabels(x_tick_label[::5],rotation=45)
ax[0].set_yticks(y_tick[::5])
ax[1].set_xticks(x[::5])
ax[1].set_xticklabels(x_tick_label[::5],rotation=45)
ax[1].set_yticks(y_tick[::5])

# (3) 设置网格线
# plt.grid(linestyle='--',alpha=0.7)
ax[0].grid(linestyle='--',alpha=0.7)
ax[1].grid(linestyle='--',alpha=0.7)

# (4) 设置图例
# plt.legend(loc="upper right")
ax[0].legend(loc="upper right")
ax[1].legend(loc="upper right")

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

5, 绘制函数图像

语法点: 

* 这里使用了numpy包来生成数据, 以及使用了numpy的sin()函数,了解matplotlib的绘图即可, 下一节还会详细介绍numpy包的使用

示例5: 绘制函数图像
# 绘制函数图像
import numpy as np
import matplotlib.pyplot as plt

#0, 准备数据与函数
# x = range(50)# 点较少
# x = np.linspace(0,50,50) #绘制函数图像的时候要取足够多的点,才能看到光滑的曲线
x = np.linspace(0,50,1000)
y = np.sin(x)

#1, 创建画板
plt.figure(figsize=(20,8))

#2, 画图
plt.plot(x,y)

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

6, 总结及问题解决

0, 输出matplotlib配置文件 "matplotlibrc" 位置, 下面步骤将会用到

import matplotlib

print(matplotlib.matplotlib_fname())
matplotlibrc文件位置, 拷贝打开红框文件夹

1, 中文乱码问题解决

将微软雅黑等字体文件导入到matplotlibrc所在文件夹->>fonts文件夹-->ttf文件夹中

步骤1, 在matplotlibrc文件中查找"font.family"

步骤2, 将文件中的#font.family: sans-serif去掉注释(#),并增加font.family: Microsoft YaHei。

2, 负号不显示问题解决

步骤1, 在matplotlibrc文件中查找"axes.unicode_minus"。

步骤2, 将文件中的#axes.unicode_minus:True 去掉注释符号(#),并将True改为False。

3, 保存配置, 关闭编辑器, 重新启动;

如果按照以上步骤还是无法正常显示中文字体的话,需要到c盘安装盘里找到matplotlib的缓冲目录,将整个目录进行删除。

然后再重启编辑器。就可以最终解决了

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

能力工场小马哥

如果对您有帮助, 请打赏支持~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值