文章目录
前言
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()
其他图例
子图
有两种方法。
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教程