首页 > 其他分享 >五彩线条

五彩线条

时间:2024-10-16 18:34:52浏览次数:4  
标签:axs set lc dydx 线条 五彩 np norm

今天,我想与你们分享一张我最近发现的五彩线条图,它不仅以其绚丽的色彩吸引我,更以其独特的图案和深邃的内涵让我着迷。这张图不仅仅是一幅简单的视觉作品,它是对复杂数据的直观呈现,是对抽象概念的具象表达。

图中的线条,如同我们生活中的轨迹,时而上升,时而下降,交织出一个个精彩的故事。色彩的渐变,如同我们情感的波动,从热烈到冷静,从明亮到暗淡,每一处变化都蕴含着深意。

我希望通过分享这张图,我们能一起探索它背后的故事,感受它带给我们的启示。也许,它能够激发我们对世界的新看法,或是引发我们对某个问题的深入思考。
图案

代码解读

点击查看代码
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.collections import LineCollection
from matplotlib.colors import ListedColormap, BoundaryNorm

x = np.linspace(0, 3 * np.pi, 500)
y = np.sin(x)
dydx = np.cos(0.5 * (x[:-1] + x[1:]))  # first derivative

# Create a set of line segments so that we can color them individually
# This creates the points as a N x 1 x 2 array so that we can stack points
# together easily to get the segments. The segments array for line collection
# needs to be (numlines) x (points per line) x 2 (for x and y)
points = np.array([x, y]).T.reshape(-1, 1, 2)
segments = np.concatenate([points[:-1], points[1:]], axis=1)

fig, axs = plt.subplots(2, 1, sharex=True, sharey=True)

# Create a continuous norm to map from data points to colors
norm = plt.Normalize(dydx.min(), dydx.max())
lc = LineCollection(segments, cmap='viridis', norm=norm)
# Set the values used for colormapping
lc.set_array(dydx)
lc.set_linewidth(2)
line = axs[0].add_collection(lc)
fig.colorbar(line, ax=axs[0])

# Use a boundary norm instead
cmap = ListedColormap(['r', 'g', 'b'])
norm = BoundaryNorm([-1, -0.5, 0.5, 1], cmap.N)
lc = LineCollection(segments, cmap=cmap, norm=norm)
lc.set_array(dydx)
lc.set_linewidth(2)
line = axs[1].add_collection(lc)
fig.colorbar(line, ax=axs[1])

axs[0].set_xlim(x.min(), x.max())
axs[0].set_ylim(-1.1, 1.1)
plt.show()
当然,让我们更详细地分析这段代码:

导入库

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.collections import LineCollection
from matplotlib.colors import ListedColormap, BoundaryNorm

这部分代码导入了所需的Python库。numpy用于数值计算,matplotlib.pyplot用于绘图,LineCollection用于创建一系列线段,ListedColormapBoundaryNorm用于自定义颜色映射。

生成数据

x = np.linspace(0, 3 * np.pi, 500)
y = np.sin(x)
dydx = np.cos(0.5 * (x[:-1] + x[1:]))  # first derivative
  • np.linspace(0, 3 * np.pi, 500)生成一个包含500个点的数组,这些点在0到之间均匀分布。
  • np.sin(x)计算这些点的正弦值,得到y轴的数据。
  • dydx计算正弦函数的一阶导数的近似值。这里使用了中心差分法来近似导数,即对于每个点x[i],其导数近似为cos(0.5 * (x[i-1] + x[i+1]))

创建线段

points = np.array([x, y]).T.reshape(-1, 1, 2)
segments = np.concatenate([points[:-1], points[1:]], axis=1)
  • np.array([x, y]).T.reshape(-1, 1, 2)将x和y的值转换成一个三维数组,其中每个“层”代表一条线段的起点和终点。这样,每个线段由两个点定义,这两个点分别是序列中的连续点。
  • np.concatenate([points[:-1], points[1:]], axis=1)将这些点连接起来,形成线段。这样,每个线段由两个点定义,这两个点分别是序列中的连续点。

创建图形和子图

fig, axs = plt.subplots(2, 1, sharex=True, sharey=True)

这行代码创建了一个包含两个子图的图形,这两个子图共享x轴和y轴。

绘制第一个子图

norm = plt.Normalize(dydx.min(), dydx.max())
lc = LineCollection(segments, cmap='viridis', norm=norm)
lc.set_array(dydx)
lc.set_linewidth(2)
line = axs[0].add_collection(lc)
fig.colorbar(line, ax=axs[0])
  • plt.Normalize(dydx.min(), dydx.max())创建一个归一化对象,将导数值映射到颜色映射的最小值和最大值。
  • LineCollection(segments, cmap='viridis', norm=norm)创建一个线集合对象,使用viridis颜色映射和上面创建的归一化对象。
  • lc.set_array(dydx)设置用于颜色映射的数据数组。
  • lc.set_linewidth(2)设置线宽为2。
  • axs[0].add_collection(lc)将线集合添加到第一个子图中。
  • fig.colorbar(line, ax=axs[0])在第一个子图旁边添加一个颜色条,以显示颜色映射的对应关系。

绘制第二个子图

cmap = ListedColormap(['r', 'g', 'b'])
norm = BoundaryNorm([-1, -0.5, 0.5, 1], cmap.N)
lc = LineCollection(segments, cmap=cmap, norm=norm)
lc.set_array(dydx)
lc.set_linewidth(2)
line = axs[1].add_collection(lc)
fig.colorbar(line, ax=axs[1])
  • ListedColormap(['r', 'g', 'b'])定义一个自定义的颜色映射,包含红色、绿色和蓝色。
  • BoundaryNorm([-1, -0.5, 0.5, 1], cmap.N)定义一个边界归一化对象,它将导数值映射到四个边界上。
  • 与第一个子图类似,但是这次使用离散的颜色映射。

设置轴范围

axs[0].set_xlim(x.min(), x.max())
axs[0].set_ylim(-1.1, 1.1)

这行代码设置第一个子图的x轴和y轴的显示范围。

显示图形

plt.show()

这行代码显示图形。
这段代码绘制了一个正弦波,并根据正弦波的导数(斜率)来给波形上色。第一个子图使用连续的颜色映射,而第二个子图使用离散的颜色映射。每个子图旁边都有一个颜色条,以显示颜色映射的对应关系。通过这种方式,可以直观地看到正弦波的斜率变化。
今天的分享就到这里,以上就是今天分享的内容。谢谢大家!

标签:axs,set,lc,dydx,线条,五彩,np,norm
From: https://www.cnblogs.com/u3516528/p/18470515

相关文章

  • CSS——边框线条动画效果
    CSS——边框线条动画效果上次我们实现了边框的线条缩放效果,今天我们来用三种方式完成边框的线条旋转动态效果。方法一:使用伪元素这是最普遍、最常用的方法,我们需要为边框所在的元素添加伪元素,然后旋转这个伪元素即可。本节将讲解以下视频的实现过程。伪元素边框旋转......
  • 在Unity UI中实现UILineRenderer组件绘制线条
    背景介绍        在Unity的UI系统中,绘制线条并不像在3D世界中那样直观(使用Unity自带的LineRender组件在UI中连线并不方便,它在三维中更合适)。没有内置的工具来处理这种需求。如果你希望在UI元素之间绘制连接线(例如在UI上连接不同的图标或控件),需要自己编写逻辑。 ......
  • Canvas绘制线条时断断续续的
    解决线条断断续续的关键代码如下:我们可以使用quadraticCurveTo来实现贝塞尔曲线使其变成光滑的曲线注意:ctx.value.lineCap="round";           ctx.value.lineJoin="round";   这两个属性是必须设置的      lastX,lastY:贝塞尔曲线的起始......
  • cad导出pdf打印标注线条粗细很粗怎么调整
    cad导出pdf时,发现线条很粗是怎么回事?要怎么设置呢?我们在使用办公文档的时候,经常会需要转换格式,因为重新制定一份文件太麻烦,太浪费时间了,如果能直接转换格式的,那当然是最好不过的了,cad可以到处pdf吗?当然是可以的。不过,相信大家在导出的时候也会遇到一些问题,正如题所说,线条很粗,那么......
  • 用Manim在图形和坐标轴上画线条
     用Manim在图形和坐标轴上画线条.画图像函数的切线angle_of_tangent(x,graph,dx=1e-08)angle_of_tangent(x,graph,dx=1e-08)是Manim中用于计算图形在给定点的切线角度的函数。以下是对该函数参数的解释:参数说明x:这是你想要计算切线角度的x坐标。在这个坐标处,......
  • 给echarts图表线条、数据点和区域设置颜色
    letmyChart=echarts.init(document.getElementById("chartmainCop"));//获取当前干部的各项评分constallIndicators=Object.keys(this.dialogEacherTable[0]).filter(key=>key!=="CadreID"&&key!=="x......
  • 使用Python去除图像中的线条
    我正在尝试使用Python和cv2、numpy、skimage等从黑白图像中删除“阴影线”(如果图像中存在“阴影线”)。本质上,我的图像可以有1或2条曲线,如下例所示。但每条线都有一条1-5像素外的阴影线,需要删除。我怎样才能在Python中做到这一点?原始......
  • 在 Python 中溶解线条
    我有一个包含多行的形状文件。我正在寻找一种方法来消除所有的接触线。这在ArcMap中是可能的,但似乎在Python和QGIS中都无法做到:之前:所需的输出:这需要在多行上完成,因此像QGIS合并一样手动执行不是一个选项。在ArcMap中,我曾经使用“溶解”......
  • 使用五彩背景更改聊天屏幕截图的背景颜色
    我有一个从聊天平台截取的屏幕截图,想要将聊天背景更改为白色,包括参与者的个人资料图片。如果屏幕截图中未显示聊天组的名称,则此问题中的代码可以正常工作。图1是原始图像的示例,图2是迄今为止取得的结果:并且我想要实现类似于图3的效果:......
  • 视野修炼-技术周刊第91期 | 惊讶线条
    欢迎来到第91期的【视野修炼-技术周刊】,下面是本期的精选内容简介......