Matplitlib绘图入门1,这一篇就够了

Posted 程序媛一枚~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Matplitlib绘图入门1,这一篇就够了相关的知识,希望对你有一定的参考价值。

1. 绘制简单的图表(标题、标签轴、刻度轴、表说明)

  • 设置标题title
  • 设置线等说明legend
  • 设置x轴标签xlabel,y轴标签ylable
  • 取消设置轴刻度xticks,yticks【plt.yticks([]) # 去掉y轴刻度 plt.xticks([]) # 去掉x轴刻度
# matplotlib基础

# 使用轴创建图形的最简单方法是使用 pyplot.subplots
# 使用 Axes.plot 在轴上绘制一些数据

import matplotlib.pyplot as plt
import numpy as np

# 创建图表(包含简单的坐标轴)
import pandas

fig, ax = plt.subplots()
# 绘制一些数据在坐标轴上
ax.plot([1, 2, 3, 4], [1, 4, 2, 3]) # 默认x(1,2,3,4),y:(1,4,2,3)

# 绘图(同如上俩句)
plt.plot([1, 2, 3, 4], [1, 3, 2, 4]) # 默认x(1,2,3,4),y:(1,3,2,4)
fig.show()

fig = plt.figure()  # 没有轴的空表
fig.show()

fig, ax = plt.subplots()  # 空表单轴
fig.show()

fig, axs = plt.subplots(2, 2)  # 一个图表俩个轴
plt.title("test table")  # 设置表title
plt.yticks([])  # 去掉y轴刻度
plt.xticks([])  # 去掉x轴刻度
plt.ylabel("height")  # 设置y轴标签
plt.xlabel("width")  # 设置x轴标签
plt.show()

# matplotlib绘图需要数据格式为numpy.array
# pandas.DataFrame转换为numpy.array
a = pandas.DataFrame(np.random.rand(4, 5), columns=list('abcde'))
a_asarray = a.values

# np.matrix转换为numpy.array
b = np.matrix([[1, 2], [3, 4]])
b_asarray = np.asarray(b)

# 基本上有两种方法可以使用matplotlib:
# - 显式创建数字和轴,并在它们上调用方法(“面向对象(OO)样式”)。
# - 依靠Pyplot自动创建和管理数字和轴,并使用Pyplot函数进行绘图。
x = np.linspace(0, 2, 100)
# 创建图表
fig, ax = plt.subplots()  # 创建图表和轴
ax.plot(x, x, label='linear')  # 在轴上绘制一些数据
ax.plot(x, x ** 2, label='quadratic')  # 在轴上绘制更多的数据
ax.plot(x, x ** 3, label='cubic')  # 在轴上绘制更多的数据
ax.set_xlabel('x label')  # 添加x轴标签
ax.set_ylabel('y label')  # 添加y轴标签
ax.set_title("Simple Plot")  # 添加图表标题
ax.legend()  # 添加图例解释
plt.show()

x = np.linspace(0, 2, 100)
plt.plot(x, x, label='linear')  # 在轴上显式绘制数据
plt.plot(x, x ** 2, label='quadratic')  # 在轴上显式绘制数据
plt.plot(x, x ** 3, label='cubic')  # 在轴上显式绘制数据
plt.xlabel('x label')
plt.ylabel('y label')
plt.title("Simple Plot")
plt.legend()
plt.show()
  • matplotlib绘制需要数据格式numpy.array,所以pandas.DataFrame,np.matrix均需要调整为numpy.array就可绘制
# matplotlib绘图需要数据格式为numpy.array
# pandas.DataFrame转换为numpy.array
a = pandas.DataFrame(np.random.rand(4, 5), columns=list('abcde'))
a_asarray = a.values

# np.matrix转换为numpy.array
b = np.matrix([[1, 2], [3, 4]])
b_asarray = np.asarray(b)

2. 绘图辅助函数方法,绘制多个图(随机点绘制多个子图,点状、x状等)

import matplotlib.pyplot as plt
import numpy as np

# 当需要进行大量的绘图时,可以编写一个公共方法: 绘图辅助函数
# ax:轴
# data1:x轴data
# data2:y轴data
# param_dict:传递到ax.plot的参数
# out:返回值,返回绘制好的图表
def my_plotter(ax, data1, data2, param_dict):
    out = ax.plot(data1, data2, **param_dict)
    return out


# 一个子图
data1, data2, data3, data4 = np.random.randn(4, 100)
fig, ax = plt.subplots(1, 1) # 中间的逗号可有可无
out = my_plotter(ax, data1, data2, {'marker': 'x'})
plt.show()

# 俩个子图
fig, (ax1, ax2) = plt.subplots(1, 2)
my_plotter(ax1, data1, data2, {'marker': 'x'})
my_plotter(ax2, data3, data4, {'marker': 'o'})
plt.show()

3. 可交互式绘图(一图单线关闭新展现一图,及一图多线)

# 一图单线关闭展现另一个图,一图多线
import matplotlib.pyplot as plt
import numpy as np

# 可交互式绘图
plt.ioff()
for i in range(3):
    plt.plot(np.random.rand(10))
    plt.show()  # 仅当第一个图关闭,第二个图出现

# 可交互式绘图
plt.ioff()
for i in range(3):
    plt.plot(np.random.rand(10))
plt.show()

4. 3种方法简化加速渲染图

  • mpl.rcParams[‘path.simplify_threshold’] = 1.0 # 可显著加快渲染
  • mpl.rcParams[‘agg.path.chunksize’] = 10000 # 可显著加快渲染
  • import matplotlib.style as mplstyle
    mplstyle.use(‘fast’) # 优化以加速渲染速度
# 线段简化示例
# 提升绘制效率,简化曲线 RCParams [“path.simplify_threshold”](默认值:0.111111111111)控制简化了多少线段;更高的阈值导致更快的渲染。
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl

# 初始化图表数据
y = np.random.rand(100000)
# print(y.shape)
y[50000:] *= 2
# print(y.shape)
# 类似于np.logspace 生成对数数组,指定了起始及返回值
y[np.geomspace(10, 50000, 400).astype(int)] = -1
mpl.rcParams['path.simplify'] = True

print(np.geomspace(10, 50000, 400).astype(int).shape)
print(np.geomspace(10, 50000, 400).astype(int))

mpl.rcParams['path.simplify_threshold'] = 0.0
plt.plot(y)
plt.show()

mpl.rcParams['path.simplify_threshold'] = 1.0 # 可显著加快渲染
plt.plot(y)
plt.show()

# 将线分割成更小的块
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
mpl.rcParams['path.simplify_threshold'] = 1.0

# 初始化要绘制的数据
y = np.random.rand(100000)
y[50000:] *= 2
y[np.geomspace(10, 50000, 400).astype(int)] = -1
mpl.rcParams['path.simplify'] = True

mpl.rcParams['agg.path.chunksize'] = 0
plt.plot(y)
plt.show()

mpl.rcParams['agg.path.chunksize'] = 10000 # 可显著加快渲染
plt.plot(y)
plt.show()

# 将线分割成更小的块
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
import matplotlib.style as mplstyle
mplstyle.use('fast') # 优化以加速渲染速度
mplstyle.use(['dark_background', 'ggplot', 'fast'])
mpl.rcParams['path.simplify_threshold'] = 1.0

# 初始化要绘制的数据
y = np.random.rand(100000)
y[50000:] *= 2
y[np.geomspace(10, 50000, 400).astype(int)] = -1
mpl.rcParams['path.simplify'] = True

mpl.rcParams['agg.path.chunksize'] = 0
plt.plot(y)
plt.show()

mpl.rcParams['agg.path.chunksize'] = 10000 # 可显著加快渲染
plt.plot(y)
plt.show()

参考

以上是关于Matplitlib绘图入门1,这一篇就够了的主要内容,如果未能解决你的问题,请参考以下文章

强化学习入门这一篇就够了!!!万字长文

万字长文!入门Docker,这一篇就够了

Elasticsearch入门,看这一篇就够了

Elasticsearch入门,看这一篇就够了

Flutter入门这一篇效率文章就够了

docker入门,这一篇就够了。