概述
使用 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 |
方法
-
np.column_stack收集 x 和 y 绘图信息,append收集在一个空数组lines中。 -
LineCollection(lines, cmap=cm.jet, array=scales)的array是一个你想要colormap的值数组。 (在示例中,绘图信息是通过更改参数scales来编译的,因此指定了scales。) -
使用
ax.add_collection(lc)向ax对象添加2 个信息。 -
使用
ax.autoscale()将图形显示范围设置为自动(整个绘图区域)。这一点很重要,因为无论绘图信息如何,LineCollection函数似乎默认设置为显示 x 轴和 y 轴的 0-1 范围。 -
用
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 创建图形时,您可能希望在单个图形中连续更改颜色,因此这里有一个示例。
准备函数
此函数将一个数组分成每 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()输出结果
如果斜率是蓝色的负数和红色的正数,则更容易理解。如果有这样的图表,我觉得高中数学的微分课可能会在理解上有所进步。将图形的 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()输出结果
将图形的 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 中显示颜色不断变化的颜色条。看看单色地图如何改变图表的外观很有趣。我希望它可以帮助某人。
参考资料
原创声明:本文系作者授权爱码网发表,未经许可,不得转载;
原文地址:https://www.likecs.com/show-308622888.html