概述

使用 matplotlib 创建图形时,您可能希望使用不断变化的颜色进行绘图并添加颜色条。在这种情况下,方便matplotlib.collections.LineCollection是。我将介绍如何使用此LineCollection 创建带有彩条的图形。

执行

本文的代码是在 Google Colab 上创建的,这里

各种进口

各种进口
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm
from matplotlib.collections import LineCollection

运行时的各种版本

姓名 版本
麻木的 1.21.6
matplotlib 3.2.2

方法

  1. np.column_stack 收集 x 和 y 绘图信息,append 收集在一个空数组 lines 中。
  2. LineCollection(lines, cmap=cm.jet, array=scales)array 是一个你想要colormap的值数组。 (在示例中,绘图信息是通过更改参数scales 来编译的,因此指定了scales。)
  3. 使用ax.add_collection(lc)ax 对象添加2 个信息。
  4. 使用ax.autoscale() 将图形显示范围设置为自动(整个绘图区域)。这一点很重要,因为无论绘图信息如何,LineCollection 函数似乎默认设置为显示 x 轴和 y 轴的 0-1 范围。
  5. fig.colorbar 显示颜色条。
    样本
    x = np.linspace(0, 4*np.pi)
    scales = np.arange(10)
    
    lines = []
    for scale in scales:
        y = scale * np.sin(x)
        lines.append(np.column_stack([x, y]))
    
    fig, ax = plt.subplots()
    lc = LineCollection(lines, cmap=cm.jet, array=scales)
    line = ax.add_collection(lc)
    # add_collection関数の後にautoscaleを指定しないとx,y軸が0-1の範囲のみが表示されるので注意
    ax.autoscale()
    ax.set_xlabel('x')
    ax.set_ylabel('y')
    
    fig.colorbar(line, label='scale')
    plt.show()
    

    输出结果
    【matplotlib】グラフの色を連続的に変えてカラーバー付きでプロットする方法

    使用示例(在一个图形中连续更改颜色的示例)

    使用 matplotlib 创建图形时,您可能希望在单个图形中连续更改颜色,因此这里有一个示例。

    准备函数

    此函数将一个数组分成每 3 个点。但是,由于我想在每三个点的两端覆盖两个点,所以我故意跳过两个点而不是跳过range(1, x.shape[0], 2)。数组应该以 numpy 格式使用。

    连续改变一个图形颜色的功能
    def single_line_stacks(x, y):
        """Parameters
        x: numpy 1D array
        y: numpy 1D array
        x and y should be the same size.
        """
        lines = []
        for coord in range(1, x.shape[0], 2):
            # 1つのグラフを3点に分割してして
            # その配列同士を被らせるようにstackする
            x_elems = x[coord-1:coord+2]
            y_elems = y[coord-1:coord+2]
            lines.append(np.column_stack([x_elems, y_elems]))
        return lines
    

    图形斜率彩图显示(差分)

    图形斜率彩图显示(差分)
    x = np.linspace(0, 4*np.pi, 1000)
    y = np.sin(x)
    lines = single_line_stacks(x, y)
    slope_cmap = np.cos(x[1::2])  # 傾き(微分)
    
    fig, ax = plt.subplots()
    lc = LineCollection(lines, cmap=cm.bwr, array=slope_cmap)
    line = ax.add_collection(lc)
    ax.autoscale()
    ax.set_xlabel('x')
    ax.set_ylabel('y')
    
    fig.colorbar(line, label='slope')
    plt.show()
    

    输出结果
    【matplotlib】グラフの色を連続的に変えてカラーバー付きでプロットする方法
    如果斜率是蓝色的负数和红色的正数,则更容易理解。如果有这样的图表,我觉得高中数学的微分课可能会在理解上有所进步。

    将图形的 x 轴显示为彩色图

    将图形的 x 轴显示为彩色图
    x = np.linspace(0, 4*np.pi, 1000)
    y = np.sin(x)
    lines = single_line_stacks(x, y)
    x_cmap = x[1::2]
    
    fig, ax = plt.subplots(figsize=(5, 6))
    lc = LineCollection(lines, cmap=cm.jet, array=x_cmap)
    line = ax.add_collection(lc)
    ax.autoscale()
    ax.set_xlabel('x')
    ax.set_ylabel('y')
    
    fig.colorbar(line, label='x', orientation='horizontal')
    plt.show()
    

    输出结果
    【matplotlib】グラフの色を連続的に変えてカラーバー付きでプロットする方法

    将图形的 y 轴显示为彩色图

    将图形的 y 轴显示为彩色图
    x = np.linspace(0, 4*np.pi, 1000)
    y = np.sin(x)
    lines = single_line_stacks(x, y)
    y_cmap = y[1::2]
    
    fig, ax = plt.subplots()
    lc = LineCollection(lines, cmap=cm.jet, array=y_cmap)
    line = ax.add_collection(lc)
    ax.autoscale()
    ax.set_xlabel('x')
    ax.set_ylabel('y')
    
    fig.colorbar(line, label='y')
    plt.show()
    

    输出结果
    【matplotlib】グラフの色を連続的に変えてカラーバー付きでプロットする方法

    概括

    我介绍了如何在 matplotlib 中显示颜色不断变化的颜色条。看看单色地图如何改变图表的外观很有趣。我希望它可以帮助某人。

    参考资料


原创声明:本文系作者授权爱码网发表,未经许可,不得转载;

原文地址:https://www.likecs.com/show-308622888.html

相关文章: