Python数据分析基础篇【Matplotlib的基础语法讲解】

本文详细介绍了Matplotlib库在Python中的应用,包括绘图要素(线型、颜色、标记、网格线)、轴标签、标题设置、各种图表(如柱形图、直方图、饼图、散点图)以及子图的创建。通过实例演示了如何使用和调整这些功能。
摘要由CSDN通过智能技术生成


前言

Matplotlib 是 Python 中最受欢迎的数据可视化软件包之一,支持跨平台运行,它是 Python 常用的 2D 绘图库,同时它也提供了一部分 3D 绘图接口。Matplotlib 通常与 NumPy、Pandas 一起使用,是数据分析中不可或缺的重要工具之一。——选自C语言中文网

第一张图

import random

import numpy as np
from matplotlib import pyplot as plt

plt.plot([i for i in range(10)], np.array([random.randint(1, 100) for i in range(10)]))  # 数组格式,第一个参数X坐标,第二个参数Y坐标
plt.xlabel("X")  # X 标签
plt.ylabel("f(x)")  # Y 标签
plt.title("X-f(x)") # 标题
plt.grid() # 加上网格线
plt.savefig("保存.png")  # 保存所画之图
plt.show()

保存图片

plt.savefig("保存.png")  # 保存所画之图

在这里插入图片描述

绘图要素

绘图标记

plot() 方法的 marker 参数来定义绘图标记。简单地说,就是所描之点的形状。
marker参数取值表

标记点的选择

plt.plot([i for i in range(10)], np.array([random.randint(1, 100) for i in range(10)]),
         marker="X")   # marker参数,绘图标记,此时所描的点为"X"形状

在这里插入图片描述

标记点的调整(如颜色、大小等)

mec = ‘#4CAF50’, mfc = ‘#4CAF50’ 颜色可以使用16进制

fmt 参数定义基本格式

fmt = ‘[marker][line][color]’,
例如 fmt=“o:r”,
o 表示实心圆标记,: 表示虚线,r 表示颜色为红色。

import matplotlib.pyplot as plt
import numpy as np

ypoints = np.array([i for i in range(10)])

plt.plot(ypoints, 'o:r')
plt.show()

在这里插入图片描述

标记点设置

定义标记的大小

markersize,简写为 ms:定义标记的大小。
plt.plot(ypoints, 'o-b',ms=30)  # 大小为30

定义标记内部的颜色

markerfacecolor,简写为 mfc:定义标记内部的颜色。
plt.plot(ypoints, 'o-b',ms=10,mfc="y")  # 黄

定义标记边框的颜色

markeredgecolor,简写为 mec:定义标记边框的颜色。
plt.plot(ypoints, 'o-b',ms=10,mfc="y",mec="r")  # 红

在这里插入图片描述

绘图线

绘图线参数取值表

线型

线的类型可以使用 linestyle 参数来定义,简写为 ls。

import matplotlib.pyplot as plt
import numpy as np
ypoints = np.array([6, 2, 13, 10])
plt.plot(ypoints, linestyle='dotted')
plt.show()

线色

color(简写c)设置线色。

plt.plot(ypoints, color = 'r')

线宽

线的宽度可以使用 linewidth 参数来定义,简写为 lw,值可以是浮点数,如:1、2.0、5.67 等。

plt.plot(ypoints, linewidth = '12.5')

多线

多线绘制
import matplotlib.pyplot as plt
import numpy as np

y1 = np.array([3, 7, 5, 9])
y2 = np.array([6, 2, 13, 10])

plt.plot(y1)
plt.plot(y2)

plt.show()
图例
import matplotlib
from matplotlib import pyplot as plt
import numpy as np

x = np.array([i for i in range(-10, 10)])
y1 = 10 * x
y2 = x ** 2 + 1 / 10 * x - 50
plt.plot(x, y1, label="10 * x")   #  图例名称 label
plt.plot(x, y2, label="x ** 2 + 1 / 10 * x - 50")
path = matplotlib.font_manager.FontProperties(fname="SourceHanSansSC-Bold.otf")
plt.title("函数图像", fontproperties=path)
plt.xlabel("x轴", fontproperties=path)
plt.ylabel("y轴", fontproperties=path)
plt.legend()     # 图例显示
plt.show()

Matplotlib 轴标签和标题

Matplotlib默认不支持中文字体,可以下载SourceHanSansSC-Bold.otf,通过该字体库,便可以使用中文做标签和标题。
可以通过百度网盘下载SourceHanSansSC-Bold.otf字体库。
链接:https://pan.baidu.com/s/1m69qwRnOzHbpoJzNxOG3tg?pwd=PypY
提取码:PypY
–来自百度网盘超级会员V4的分享

标签标题及位置设置

标题与标签的定位
title() 方法提供了 loc 参数来设置标题显示的位置,可以设置为: ‘left’, ‘right’, 和 ‘center’, 默认值为 ‘center’。

xlabel() 方法提供了 loc 参数来设置 x 轴显示的位置,可以设置为: ‘left’, ‘right’, 和 ‘center’, 默认值为 ‘center’。

ylabel() 方法提供了 loc 参数来设置 y 轴显示的位置,可以设置为: ‘bottom’, ‘top’, 和 ‘center’, 默认值为 ‘center’。

plt.title("TITLE") # 标题
plt.xlabel("x - label") # x标签
plt.ylabel("y - label") # y标签

SourceHanSansSC-Bold.otf字体库的使用方法

import numpy as np
from matplotlib import pyplot as plt
import matplotlib

# fname 为 你下载的字体库路径,注意 SourceHanSansSC-Bold.otf 字体的路径
path = matplotlib.font_manager.FontProperties(fname="SourceHanSansSC-Bold.otf")  # 此时,文字库与py文件在同一目录
X = [i for i in range(-100, 100) if i != 0]
x = np.array(X)
y = x ** 5 + 10 * (1 / x) + 1000
plt.title("x ** 5 + 10 * (1 / x) + 1000的函数图像", fontproperties=path)

# fontproperties 设置中文显示,fontsize 设置字体大小
plt.xlabel("x 轴", fontproperties=path)
plt.ylabel("y 轴", fontproperties=path)
plt.plot(x, y)
plt.show()

在这里插入图片描述

Matplotlib 网格线

自设样式

plt.grid()

color:‘b’ 蓝色,‘m’ 洋红色,‘g’ 绿色,‘y’ 黄色,‘r’ 红色,‘k’ 黑色,‘w’ 白色,‘c’ 青绿色,‘#008000’ RGB 颜色符串。

linestyle:‘‐’ 实线,‘‐‐’ 破折线,‘‐.’ 点划线,‘:’ 虚线。

linewidth:设置线的宽度,可以设置一个数字。

import numpy as np
import matplotlib.pyplot as plt

x = np.array([1, 2, 3, 4])
y = np.array([1, 4, 9, 16])


plt.title("RUNOOB grid() Test")
plt.xlabel("x - label")
plt.ylabel("y - label")

plt.plot(x, y)

plt.grid(color = 'r', linestyle = '--', linewidth = 0.5)      # 设置网格线
# plt.grid(axis='x') # 设置 y 就在轴方向显示网格线

plt.show()

使用风格样式

print(plt.style.available)    # 查看样式
plt.style.use('fivethirtyeight')   # 使用样式

其他操作(如刻度控制)

import matplotlib.pyplot as plt
import numpy as np

# 绘制普通图像
x = np.linspace(-1, 1, 50)
y1 = 3 * x + 1
y2 = x ** 2

plt.figure()
# 在绘制时设置lable, 逗号是必须的
l1, = plt.plot(x, y1, label='line')
l2, = plt.plot(x, y2, label='parabola', color='red', linewidth=1.0, linestyle='--')

# 设置坐标轴的取值范围
plt.xlim((-1, 5))
plt.ylim((0, 2))

# 设置坐标轴的lable
plt.xlabel('X axis')
plt.ylabel('Y axis')

# 设置x坐标轴刻度, 原来为0.25, 修改后为0.5
plt.xticks(np.linspace(-1, 1, 5))
# 设置y坐标轴刻度及标签, $$是设置字体
plt.yticks([0, 0.5,1,2,3], ['$minimum$', 'normal','three','f4','f5'])

# 设置legend
plt.legend(handles=[l1, l2, ], labels=['a', 'b'], loc='best')
plt.show()

柱形图

matplotlib.pyplot.bar(x, height, width=0.8, bottom=None, *, align='center', data=None, **kwargs)

横向

import matplotlib.pyplot as plt
import numpy as np

"""
x:浮点型数组,柱形图的 x 轴数据。
height:浮点型数组,柱形图的高度。
width:浮点型数组,柱形图的宽度。
bottom:浮点型数组,底座的 y 坐标,默认 0。
align:柱形图与 x 坐标的对齐方式,'center' 以 x 位置为中心,这是默认值。 
'edge':将柱形图的左边缘与 x 位置对齐。要对齐右边缘的条形,可以传递负数的宽度值及 align='edge'。
"""

x = np.array(["OO-1", "00-2", "00-3", "00-4"])
y = np.array([12, 22, 6, 18])

plt.bar(x, y, width=0.5, color=["#4CAF50", "red", "hotpink", "blue"])
plt.plot(x, y)  # 加入直线图
plt.show()

在这里插入图片描述

纵向

plt.barh(x, y, height = 0.1)

直方图

直方图

绘制例子

import matplotlib.pyplot as plt
import numpy as np

# 生成三组随机数据
data1 = np.random.normal(0, 1, 1000)
data2 = np.random.normal(2, 1, 1000)
data3 = np.random.normal(-2, 1, 1000)

# 绘制直方图
plt.hist(data1, bins=30, alpha=0.5, label='Data 1')  # alpha 颜色深度0-1
plt.hist(data2, bins=30, alpha=0.5, label='Data 2')
plt.hist(data3, bins=30, alpha=0.5, label='Data 3')

# 设置图表属性
plt.title('TEST')
plt.xlabel('Value')
plt.ylabel('Frequency')
plt.legend()

# 显示图表
plt.show()

在这里插入图片描述

饼图

饼图适用于5个左右的数据的百分比展示。

import matplotlib.pyplot as plt
import numpy as np

y = np.array([35, 25, 25, 15])

plt.pie(y,
        labels=['A','B','C','D'], # 设置饼图标签
        colors=["#d5695d", "#5d8ca8", "#65a479", "#a564c9"], # 设置饼图颜色
        explode=(0, 0.2, 0, 0), # 第二部分突出显示,值越大,距离中心越远
        autopct='%.2f%%', # 格式化输出百分比
        shadow=True,  # 阴影(厚度)
        startangle=90 # 原图旋转一定角度
       )
plt.title("pie")
plt.show()

在这里插入图片描述

散点图

散点图
scatter() 函数接收长度相同的数组参数,一个用于 x 轴的值,另一个用于 y 轴上的值

一组数据

import matplotlib.pyplot as plt
import numpy as np

x = np.array([1, 2, 3, 4, 5, 6, 7, 8])
y = np.array([1, 4, 9, 16, 7, 11, 23, 18])
sizes = np.array([20, 50, 100, 200, 500, 1000, 60, 90]) # 设置点大小
plt.scatter(x, y, s=sizes, color=["red", "green", "black", "orange", "purple", "beige", "cyan", "magenta"]) # 颜色
plt.show()

在这里插入图片描述

两组数据

import matplotlib.pyplot as plt
import numpy as np

x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
plt.scatter(x, y, color = 'blue')

x = np.array([2,2,8,1,15,8,12,9,7,3,11,4,7,14,12])
y = np.array([100,105,84,105,90,99,90,95,94,100,79,112,91,80,85])
plt.scatter(x, y, color = 'red')

plt.show()

在这里插入图片描述

带颜色条

import matplotlib.pyplot as plt
import numpy as np

x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
colors = np.array([0, 10, 20, 30, 40, 45, 50, 55, 60, 70, 80, 90, 100])

plt.scatter(x, y, c=colors, cmap='viridis') # 设置颜色条需要使用 cmap 参数,默认值为 'viridis',之后颜色值设置为 0 到 100 的数组
plt.colorbar() # 显示颜色条,需要使用 plt.colorbar() 方法
plt.show()

在这里插入图片描述

其他图例

C语言中文网
matplotlib中文示例网

子图

有两种方法。

import matplotlib.pyplot as plt
import numpy as np

# plot 1:
xpoints = np.array([0, 6])
ypoints = np.array([0, 100])

plt.subplot(1, 3, 1)  # subplot(nrows, ncols, index, **kwargs) # 一行二列第一个
plt.plot(xpoints, ypoints)
plt.title("plot 1")

# plot 2:
x = np.array([i * 2 for i in range(4)])
y = np.array([1, 4, 9, 16])

plt.subplot(1, 3, 2) # 一行二列第二个
plt.plot(x, y)
plt.title("plot 2")

# plot 3:
x = np.array([i * 2 for i in range(4)])
y = np.array([1, 4, 9, 16])

plt.subplot(1, 3, 3) # 一行二列第三个
plt.plot(x, y)
plt.title("plot 3")


plt.suptitle("Test")
plt.show()

在这里插入图片描述

总结

个人建议用runoob教程入门,再用C语言中文网教程回顾提升,最后再结合实际需要,多参考官网的deom,完成个人实际需要。
matplotlib中文网
matplotlib官网
bilibili宝藏教程
C语言中文网教程
runoob教程

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

额狮虎

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值