如何在Flutter中实现最高点下方带渐变填充的曲线图?
最高点下方带渐变填充图表实现方案

以下是基于Python Matplotlib库的实现方法,你也可以参考逻辑适配其他可视化工具:
实现逻辑
- 先获取你的折线数据,定位到数值最高点的坐标
- 生成你需要的渐变色彩配置
- 用折线路径作为裁剪蒙版,只保留折线下方到X轴的渐变填充区域
可直接运行的示例代码
import numpy as np import matplotlib.pyplot as plt from matplotlib.colors import LinearSegmentedColormap # 替换为你自己的实际数据 x = np.linspace(0, 10, 100) y = np.sin(x) * x # 定位曲线最高点 peak_index = np.argmax(y) peak_y = y[peak_index] # 自定义渐变颜色,这里是从透明过渡到半透明蓝色,可自行修改色值 grad_cmap = LinearSegmentedColormap.from_list('custom_grad', ['#ffffff00', '#2563eb99']) fig, ax = plt.subplots(figsize=(8, 5)) # 先绘制基础填充区域,用于后续裁剪 base_fill = ax.fill_between(x, 0, y, alpha=0) # 绘制渐变纹理 x_range = ax.get_xlim() grad_img = ax.imshow( np.linspace(0, 1, 256).reshape(-1, 1), extent=[x_range[0], x_range[1], 0, peak_y], aspect='auto', cmap=grad_cmap, zorder=0 ) # 用折线填充路径裁剪渐变,只保留折线下方区域 grad_img.set_clip_path(base_fill.get_paths()[0], transform=ax.transData) # 绘制折线和最高点标记 ax.plot(x, y, color='#2563eb', linewidth=2.5) ax.scatter(x[peak_index], peak_y, color='#2563eb', s=60, zorder=3) plt.show()
如果使用前端可视化库ECharts,可以直接配置系列的areaStyle为线性渐变,同时设置markPoint标记最高点即可,不需要手动计算裁剪路径。
内容的提问来源于stack exchange,提问作者Mahdi Dahouei
相关产品推荐
相关产品推荐

