python - 如何将 matplotlib LineCollections 与可变线宽连接起来
问题描述
我正在尝试使用 matplotlib按照这个答案的思路做一些事情。这很好用,但是我没有足够的数据,并且希望线宽的变化太大以使其看起来不错。我得到的如下所示,其中没有太多要绘制的值,并且在绘图曲线很多的地方有空白。
对于这个例子,我只是从gg349的答案中取出代码并替换x = np.linspace(0,4*np.pi,10000)
为x = np.linspace(0,4*np.pi,100)
我正在寻找一种方法来使它看起来像一条在大小上发生变化的线,而不是很多彼此背靠背的小线(它们在技术上是这样,但我想隐藏它)
由于英语不是我的第一语言,我很难正确地提出我的问题,请原谅任何错误。
解决方案
您可以使用样条插值沿曲线创建更多段。
import numpy as np
from matplotlib.collections import LineCollection
import matplotlib.pyplot as plt
from scipy.interpolate import splev, splrep
x = np.linspace(0, 4*np.pi, 40)
y = np.cos(x)
spl = splrep(x, y)
x2 = np.linspace(0, 4*np.pi, 3000)
y2 = splev(x2, spl)
fig,a = plt.subplots(1, 2, figsize=(20,8))
for i, xy in enumerate([(x, y), (x2, y2)]):
x3, y3 = xy
lwidths=1+x3[:-1]
points = np.array([x3, y3]).T.reshape(-1, 1, 2)
segments = np.concatenate([points[:-1], points[1:]], axis=1)
lc = LineCollection(segments, linewidths=lwidths,color='blue')
a[i].add_collection(lc)
a[i].set_xlim(0,4*np.pi)
a[i].set_ylim(-1.1,1.1)
推荐阅读
- python - 为 Python 程序设置解释器
- git - 如何每秒 Git 拉取和显示状态
- python - 使用 pytest 测试模块执行
- ruby-on-rails - 我无法在 rails 6.0.3 中使用 gem 'ar-octopus'
- applescript - 如何使用 AppleScript 在邮件应用程序中选择来自发件人的邮件?
- r - fread:na.strings 中的空字符串 ("") 不会被解释为 NA
- python - Python循环函数仅在Dataframe中的行中满足条件时提取第一列名称
- opengl - 使用 Alpha 混合进行深度测试
- laravel - 在每个刀片中包含导航栏和页脚的正确方法 - Laravel 7?
- angular - 向生产模式添加新更改后清除 Angular 缓存