我对SVG完全不了解,请耐心等待我的翻译。我阅读了很多关于此主题的文章,每个人都指向像d3.js这样的解决方案,但在我看来,这对于我所需的简单任务来说过于复杂。
我需要制作一个带有笛卡尔坐标系的图表,其中(0,0)位于左下角。它需要具有宽度、高度和数据,以百分比表示,因此所有内容都可以随页面缩放。
所以,这是我的代码(为了简单起见,只有部分图表):
<style>
.grid {stroke: white; stroke-width: 1; stroke-dasharray: 1 2}
.label{font-family: courier new; fill: white; font-size: 14px}
.data {stroke: white; stroke-width: 1}
</style>
<svg width="100%" height="100%">
<g class="x grid">
<line x1="0%" x2="0%" y1="80%" y2="100%"></line>
<line x1="10%" x2="10%" y1="80%" y2="100%"></line>
<line x1="20%" x2="20%" y1="80%" y2="100%"></line>
</g>
<g class="y grid">
<line x1="0%" x2="20%" y1="80%" y2="80%" ></line>
<line x1="0%" x2="20%" y1="90%" y2="90%" ></line>
<line x1="0%" x2="20%" y1="100%" y2="100%"></line>
</g>
<g class="x label">
<text x="10%" y="100%"> 1 minute </text>
<text x="20%" y="100%"> 2 minutes</text>
</g>
<g class="y label">
<text x="0%" y="80%"> 20% </text>
<text x="0%" y="90%"> 10% </text>
</g>
<g class="data">
<line x1="0%" x2="10%" y1="85%" y2="92%" ></line>
<line x1="10%" x2="20%" y1="92%" y2="88%" ></line>
</g>
</svg>
我想使用
polygon
和path
来处理数据,这样我就可以填充曲线下面的区域,但是它不支持以百分比为值。有人建议使用viewbox
将百分比转换为像素,然后再使用像素,但这会破坏我的网格。我还希望在左下角有一个(0,0)点,这样我的CGI就不必对需要显示的所有点进行计算了。我尝试过transform="translate(0,100) scale(1,-1)"
,但它不支持百分比。我还尝试过transform="rotate(270)"
,但当你缩小窗口宽度时,图形高度也会减小...
所以,有人能够帮助我启动这个项目吗?帮我设置一个流体的、可调整大小的图形,原点位于左下角,并且曲线下方有着不同的颜色区域?
g
中,这样可以让代码更简单、更清晰。但还有一件事情我想要解决,但我不知道该怎么做。我不需要保持长宽比例。我想让图表填满页面(或父级div
)并且具有弹性。这能用viewport
实现吗? - Ulrik<svg width="100%" height="100%" preserveAspectRatio="none">
。 - Paul LeBeau