如何在 d3 和 SVG 中创建阴影路径?
How to create shaded path in d3 and SVG?
我正在创建一个带有阴影效果的图表,并且想要一个折线图,其效果类似于 this 来自 Apple 的 Health 工具包,除了在最后一个数据点之后没有尖锐的垂直线。本质上,我希望在线条下方的阴影是线条的形状,而不是像一个非常模糊的阴影。这在 d3 中如何实现?
除了图形线之外,您还需要创建一个放置在图形线后面的多边形。给那个多边形一个线性渐变。渐变颜色为白色,从顶部半透明到底部全透明。
演示如下。我会让你把它转换成 d3。
<svg width="750" height="384">
<defs>
<!-- The below-the-graph gradient fill -->
<linearGradient id="grad" x2="0" y2="1">
<stop offset="0%" stop-color="white" stop-opacity="0.5"/>
<stop offset="100%" stop-color="white" stop-opacity="0"/>
</linearGradient>
<filter id="blur">
<feGaussianBlur stdDeviation="10" />
</filter>
</defs>
<!-- The orange background -->
<rect x="10" y="10" width="734" height="368" rx="14" fill="#ff7744"/>
<!-- This transform just moves the graph from the origin (top left) onto the orange background -->
<g transform="translate(80,134)">
<!-- Same shape as the graph but adds points at bottom right and bottom left to complete the polygon -->
<polygon fill="url(#grad)" filter="url(#blur)"
points="0,127, 90,85, 180,115, 270,47, 360,143, 450,0
450,177, 0,177"/>
<!-- The white graph line goes last (on top) -->
<polyline fill="none" stroke="white" stroke-width="3"
points="0,127, 90,85, 180,115, 270,47, 360,143, 450,0"/>
</g>
</svg>
更新
抱歉,我一定没有理解您关于模糊线下渐变的观点。我在我的示例中添加了一点模糊,以向您展示模糊滤镜的功能。这只是一个快速的破解,你可以看到它是如何在线上流血的。要解决此问题,您需要制作遮罩或剪辑路径来遮盖线条上方的区域,以便看不到出血。
我正在创建一个带有阴影效果的图表,并且想要一个折线图,其效果类似于 this 来自 Apple 的 Health 工具包,除了在最后一个数据点之后没有尖锐的垂直线。本质上,我希望在线条下方的阴影是线条的形状,而不是像一个非常模糊的阴影。这在 d3 中如何实现?
除了图形线之外,您还需要创建一个放置在图形线后面的多边形。给那个多边形一个线性渐变。渐变颜色为白色,从顶部半透明到底部全透明。
演示如下。我会让你把它转换成 d3。
<svg width="750" height="384">
<defs>
<!-- The below-the-graph gradient fill -->
<linearGradient id="grad" x2="0" y2="1">
<stop offset="0%" stop-color="white" stop-opacity="0.5"/>
<stop offset="100%" stop-color="white" stop-opacity="0"/>
</linearGradient>
<filter id="blur">
<feGaussianBlur stdDeviation="10" />
</filter>
</defs>
<!-- The orange background -->
<rect x="10" y="10" width="734" height="368" rx="14" fill="#ff7744"/>
<!-- This transform just moves the graph from the origin (top left) onto the orange background -->
<g transform="translate(80,134)">
<!-- Same shape as the graph but adds points at bottom right and bottom left to complete the polygon -->
<polygon fill="url(#grad)" filter="url(#blur)"
points="0,127, 90,85, 180,115, 270,47, 360,143, 450,0
450,177, 0,177"/>
<!-- The white graph line goes last (on top) -->
<polyline fill="none" stroke="white" stroke-width="3"
points="0,127, 90,85, 180,115, 270,47, 360,143, 450,0"/>
</g>
</svg>
更新
抱歉,我一定没有理解您关于模糊线下渐变的观点。我在我的示例中添加了一点模糊,以向您展示模糊滤镜的功能。这只是一个快速的破解,你可以看到它是如何在线上流血的。要解决此问题,您需要制作遮罩或剪辑路径来遮盖线条上方的区域,以便看不到出血。