Analyzing Scalable Vector Graphics Images

Pranav Lal

updated August 10, 2011

Introduction

This article will outline one way by which blind people can analyze complex SVG (Scalable Vector Graphics) images. You can produce tactile diagrams by using technology such as IVEO but how do you know what set of commands correspond to what shapes? In addition, you may always not have your tactile embosser at hand. Yes, they have become smaller but are not portable. Finally, this approach has the side benefit that the tools it uses are freely available.

Note:

The illustration at the end of this article deals with the most complex case of all, namely a situation when you have unstructured SVG. Structured SVG is easier to analyze since objects will be labeled adequately.

The problem of buffered coordinates

SVG is easy to read since many commands encode shape information. See the below command that draws a rectangle.

<rect x="92" y="86" width="314" height="22" style="fill:rgb(228,249,255);fill-opacity:1;stroke:none;" />

The above rectangle is centered at 92,86 and is 22 units long and 314 units wide. There is a bunch of style information but that is not relevant to the extraction of shape information therefore is not discussed here. The challenge lies in visualising each shape in the diagram and relating to other shapes in the correct order. More over, when the <path> element is used, you need to decode it and visualize what shape the coordinates represent.

<path style="fill-rule:evenodd;fill:rgb(228,249,255);fill-opacity:1;stroke:none;" d="M 84 122 L 84 119.2 L 114 89.2 L 114 92Z" />

Towards a solution

One approach to tackling this problem is to extract commands from the file and print the set you are interested in. this generates a lot of paper.

I have investigated the possibility of executing a SVG file like you do when debugging a program. The advantage of this approach is that you can see the effect of each command and see how the image is built. I have not found any accessible tools to do this.

My Solution

Prerequisites

· The Ivio viewer or Ivio Creator. You can try a browser like Firefox, Intenet Explorer 9 or even Chrome. However, a Browser’s interface is more cluttered so interpretting the vOICe’s soundscapes is that much harder.

· The vOICe from http://www.seeingwithsound.com.

· Your favorite text editor. It will help if it can handle multiple documents.

Solution steps

Warning: Please ensure that your XML is valid and that you close all tags correctly.

1. Open the image in IVEO or in whatever SVG viewer you are using.

2. Set the vOICe to active window or active window client sonification. Active window client sonification is better since it eliminates screen clutter in certain circumstances.

3. Examine the complete image. Look for distinguishing features. For example, if you are looking at a bar graph, try to locate the bars. Try separating what is in the foreground and what is in the background. Negative video may help here.

4. Set a goal. For instance, you want to see just the lines in a line graph excluding the legend text, axes etc.

5. Skim the |text of the SVG image in your text editor. Do a rough pattern analysis of the image. For instance, are there blocks of rectangles together? Are there bunch of ellipses appearing one after another?

6. Take a set of contiguous commands and paste them into a new text document. Ensure that you complete the SVG XML by adding the root node and the closing SVG tag (</svg>) tag to the relevant parts of the file.

7. Open the file in IVEO and use the vOICe to see what the image looks like.

8. Repeat the above process until you are familiar with the image.

Illustration

See the below bar graph. The graph consists of clustered bars.

Note:

To skip to the end of the image, search for “</svg>” without the quotes.

<?xml version="1.0" encoding="utf-8" standalone="yes"?>

<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"[]>

<svg width="100%" height="100%" viewBox="0 0 512 368" version="1.1" xmlns="http://www.w3.org/2000/svg">

<rect x="0" y="0" width="511" height="367" style="fill:rgb(255,255,255);fill-opacity:1;stroke:none;" />

<text x="255" y="32" font-family="Verdana" font-size="14" font-weight="bold" fill="rgb(0,0,0)" text-anchor="middle" style="baseline-shift:-25%">Sheet1 Chart 4</text>

<text x="254" y="323" font-family="Verdana" font-size="11" font-weight="bold" fill="rgb(0,0,0)" text-anchor="middle" style="baseline-shift:-75%">X Axis</text>

<g transform="translate(20,204.5) rotate(270)">

<text x="2" y="0" font-family="Verdana" font-size="11" font-weight="bold" fill="rgb(0,0,0)" style="baseline-shift:-75%">Y axis</text>

</g>

<rect x="104" y="270" width="302" height="23" style="fill:rgb(228,249,255);fill-opacity:1;stroke:none;" />

<rect x="104" y="247" width="302" height="23" style="fill:rgb(201,243,255);fill-opacity:1;stroke:none;" />

<rect x="104" y="224" width="302" height="23" style="fill:rgb(228,249,255);fill-opacity:1;stroke:none;" />

<rect x="104" y="201" width="302" height="23" style="fill:rgb(201,243,255);fill-opacity:1;stroke:none;" />

<rect x="104" y="178" width="302" height="23" style="fill:rgb(228,249,255);fill-opacity:1;stroke:none;" />

<rect x="104" y="156" width="302" height="22" style="fill:rgb(201,243,255);fill-opacity:1;stroke:none;" />

<rect x="104" y="133" width="302" height="23" style="fill:rgb(228,249,255);fill-opacity:1;stroke:none;" />

<rect x="104" y="110" width="302" height="23" style="fill:rgb(201,243,255);fill-opacity:1;stroke:none;" />

<rect x="104" y="87" width="302" height="23" style="fill:rgb(228,249,255);fill-opacity:1;stroke:none;" />

<rect x="104" y="64" width="302" height="23" style="fill:rgb(201,243,255);fill-opacity:1;stroke:none;" />

<line x1="99" y1="293" x2="104" y2="293" stroke-dasharray="2,2" style="stroke:rgb(0,0,0);stroke-width:1" />

<line x1="105" y1="293" x2="405" y2="293" style="stroke:rgb(0,0,255);stroke-width:1" />

<text x="94" y="283" font-family="Verdana" font-size="11" fill="rgb(0,0,0)" text-anchor="end" style="baseline-shift:-75%">-254.00</text>

<line x1="99" y1="270" x2="104" y2="270" stroke-dasharray="2,2" style="stroke:rgb(0,0,0);stroke-width:1" />

<line x1="105" y1="270" x2="405" y2="270" style="stroke:rgb(0,0,255);stroke-width:1" />

<text x="94" y="260" font-family="Verdana" font-size="11" fill="rgb(0,0,0)" text-anchor="end" style="baseline-shift:-75%">-188.50</text>

<line x1="99" y1="247" x2="104" y2="247" stroke-dasharray="2,2" style="stroke:rgb(0,0,0);stroke-width:1" />

<line x1="105" y1="247" x2="405" y2="247" style="stroke:rgb(0,0,255);stroke-width:1" />

<text x="94" y="237" font-family="Verdana" font-size="11" fill="rgb(0,0,0)" text-anchor="end" style="baseline-shift:-75%">-123.00</text>

<line x1="99" y1="224" x2="104" y2="224" stroke-dasharray="2,2" style="stroke:rgb(0,0,0);stroke-width:1" />

<line x1="105" y1="224" x2="405" y2="224" style="stroke:rgb(0,0,255);stroke-width:1" />

<text x="94" y="214" font-family="Verdana" font-size="11" fill="rgb(0,0,0)" text-anchor="end" style="baseline-shift:-75%">-57.50</text>

<line x1="99" y1="201" x2="104" y2="201" stroke-dasharray="2,2" style="stroke:rgb(0,0,0);stroke-width:1" />

<line x1="105" y1="201" x2="405" y2="201" style="stroke:rgb(0,0,255);stroke-width:1" />

<text x="94" y="191" font-family="Verdana" font-size="11" fill="rgb(0,0,0)" text-anchor="end" style="baseline-shift:-75%">8.00</text>

<line x1="99" y1="178" x2="104" y2="178" stroke-dasharray="2,2" style="stroke:rgb(0,0,0);stroke-width:1" />

<line x1="105" y1="178" x2="405" y2="178" style="stroke:rgb(0,0,255);stroke-width:1" />

<text x="94" y="168" font-family="Verdana" font-size="11" fill="rgb(0,0,0)" text-anchor="end" style="baseline-shift:-75%">73.50</text>

<line x1="99" y1="156" x2="104" y2="156" stroke-dasharray="2,2" style="stroke:rgb(0,0,0);stroke-width:1" />

<line x1="105" y1="156" x2="405" y2="156" style="stroke:rgb(0,0,255);stroke-width:1" />

<text x="94" y="146" font-family="Verdana" font-size="11" fill="rgb(0,0,0)" text-anchor="end" style="baseline-shift:-75%">139.00</text>

<line x1="99" y1="133" x2="104" y2="133" stroke-dasharray="2,2" style="stroke:rgb(0,0,0);stroke-width:1" />

<line x1="105" y1="133" x2="405" y2="133" style="stroke:rgb(0,0,255);stroke-width:1" />

<text x="94" y="123" font-family="Verdana" font-size="11" fill="rgb(0,0,0)" text-anchor="end" style="baseline-shift:-75%">204.50</text>

<line x1="99" y1="110" x2="104" y2="110" stroke-dasharray="2,2" style="stroke:rgb(0,0,0);stroke-width:1" />

<line x1="105" y1="110" x2="405" y2="110" style="stroke:rgb(0,0,255);stroke-width:1" />

<text x="94" y="100" font-family="Verdana" font-size="11" fill="rgb(0,0,0)" text-anchor="end" style="baseline-shift:-75%">270.00</text>

<line x1="99" y1="87" x2="104" y2="87" stroke-dasharray="2,2" style="stroke:rgb(0,0,0);stroke-width:1" />

<line x1="105" y1="87" x2="405" y2="87" style="stroke:rgb(0,0,255);stroke-width:1" />

<text x="94" y="77" font-family="Verdana" font-size="11" fill="rgb(0,0,0)" text-anchor="end" style="baseline-shift:-75%">335.50</text>

<line x1="99" y1="64" x2="104" y2="64" stroke-dasharray="2,2" style="stroke:rgb(0,0,0);stroke-width:1" />

<line x1="105" y1="64" x2="405" y2="64" style="stroke:rgb(0,0,255);stroke-width:1" />

<text x="94" y="54" font-family="Verdana" font-size="11" fill="rgb(0,0,0)" text-anchor="end" style="baseline-shift:-75%">401.00</text>

<line x1="131" y1="65" x2="131" y2="292" style="stroke:rgb(0,0,255);stroke-width:1" />

<line x1="159" y1="65" x2="159" y2="292" style="stroke:rgb(0,0,255);stroke-width:1" />

<line x1="186" y1="65" x2="186" y2="292" style="stroke:rgb(0,0,255);stroke-width:1" />

<line x1="214" y1="65" x2="214" y2="292" style="stroke:rgb(0,0,255);stroke-width:1" />

<line x1="241" y1="65" x2="241" y2="292" style="stroke:rgb(0,0,255);stroke-width:1" />

<line x1="269" y1="65" x2="269" y2="292" style="stroke:rgb(0,0,255);stroke-width:1" />

<line x1="296" y1="65" x2="296" y2="292" style="stroke:rgb(0,0,255);stroke-width:1" />

<line x1="324" y1="65" x2="324" y2="292" style="stroke:rgb(0,0,255);stroke-width:1" />

<line x1="351" y1="65" x2="351" y2="292" style="stroke:rgb(0,0,255);stroke-width:1" />

<line x1="379" y1="65" x2="379" y2="292" style="stroke:rgb(0,0,255);stroke-width:1" />

<line x1="131" y1="294" x2="131" y2="298" style="stroke:rgb(0,0,0);stroke-width:1" />

<line x1="159" y1="294" x2="159" y2="298" style="stroke:rgb(0,0,0);stroke-width:1" />

<line x1="186" y1="294" x2="186" y2="298" style="stroke:rgb(0,0,0);stroke-width:1" />

<line x1="214" y1="294" x2="214" y2="298" style="stroke:rgb(0,0,0);stroke-width:1" />

<line x1="241" y1="294" x2="241" y2="298" style="stroke:rgb(0,0,0);stroke-width:1" />

<line x1="269" y1="294" x2="269" y2="298" style="stroke:rgb(0,0,0);stroke-width:1" />

<line x1="296" y1="294" x2="296" y2="298" style="stroke:rgb(0,0,0);stroke-width:1" />

<line x1="324" y1="294" x2="324" y2="298" style="stroke:rgb(0,0,0);stroke-width:1" />

<line x1="351" y1="294" x2="351" y2="298" style="stroke:rgb(0,0,0);stroke-width:1" />

<line x1="379" y1="294" x2="379" y2="298" style="stroke:rgb(0,0,0);stroke-width:1" />

<text x="117" y="303" font-family="Verdana" font-size="11" fill="rgb(0,0,0)" text-anchor="middle" style="baseline-shift:-75%"></text>

<text x="144" y="303" font-family="Verdana" font-size="11" fill="rgb(0,0,0)" text-anchor="middle" style="baseline-shift:-75%">99</text>

<text x="172" y="303" font-family="Verdana" font-size="11" fill="rgb(0,0,0)" text-anchor="middle" style="baseline-shift:-75%">00</text>

<text x="199" y="303" font-family="Verdana" font-size="11" fill="rgb(0,0,0)" text-anchor="middle" style="baseline-shift:-75%">01</text>

<text x="227" y="303" font-family="Verdana" font-size="11" fill="rgb(0,0,0)" text-anchor="middle" style="baseline-shift:-75%">02</text>

<text x="254" y="303" font-family="Verdana" font-size="11" fill="rgb(0,0,0)" text-anchor="middle" style="baseline-shift:-75%">03</text>

<text x="281" y="303" font-family="Verdana" font-size="11" fill="rgb(0,0,0)" text-anchor="middle" style="baseline-shift:-75%">04</text>

<text x="309" y="303" font-family="Verdana" font-size="11" fill="rgb(0,0,0)" text-anchor="middle" style="baseline-shift:-75%">05</text>

<text x="336" y="303" font-family="Verdana" font-size="11" fill="rgb(0,0,0)" text-anchor="middle" style="baseline-shift:-75%">06</text>

<text x="364" y="303" font-family="Verdana" font-size="11" fill="rgb(0,0,0)" text-anchor="middle" style="baseline-shift:-75%">07</text>

<text x="391" y="303" font-family="Verdana" font-size="11" fill="rgb(0,0,0)" text-anchor="middle" style="baseline-shift:-75%">08</text>

<line x1="104" y1="64" x2="104" y2="293" style="stroke:rgb(0,0,0);stroke-width:1" />

<line x1="406" y1="64" x2="406" y2="293" style="stroke:rgb(0,0,0);stroke-width:1" />

<line x1="104" y1="64" x2="406" y2="64" style="stroke:rgb(0,0,0);stroke-width:1" />

<line x1="104" y1="293" x2="406" y2="293" style="stroke:rgb(0,0,0);stroke-width:1" />

<defs>

<filter id="b1">

<feGaussianBlur in="SourceGraphic" stdDeviation="4" />

</filter>

</defs>

<g filter="url(#b1)">

<rect x="112" y="200" width="21" height="85" style="fill:url(#f0);stroke:none;" />

</g>

<defs>

<filter id="b2">

<feGaussianBlur in="SourceGraphic" stdDeviation="4" />

</filter>

</defs>

<g filter="url(#b2)">

<rect x="140" y="200" width="21" height="89" style="fill:url(#f1);stroke:none;" />

</g>

<defs>

<filter id="b3">

<feGaussianBlur in="SourceGraphic" stdDeviation="4" />

</filter>

</defs>

<g filter="url(#b3)">

<rect x="167" y="61" width="21" height="139" style="fill:url(#f2);stroke:none;" />

</g>

<defs>

<filter id="b4">

<feGaussianBlur in="SourceGraphic" stdDeviation="4" />

</filter>

</defs>

<g filter="url(#b4)">

<rect x="195" y="68" width="21" height="132" style="fill:url(#f3);stroke:none;" />

</g>

<defs>

<filter id="b5">

<feGaussianBlur in="SourceGraphic" stdDeviation="4" />

</filter>

</defs>

<g filter="url(#b5)">

<rect x="222" y="114" width="21" height="86" style="fill:url(#f4);stroke:none;" />

</g>

<defs>

<filter id="b6">

<feGaussianBlur in="SourceGraphic" stdDeviation="4" />

</filter>

</defs>

<g filter="url(#b6)">

<rect x="250" y="72" width="21" height="128" style="fill:url(#f5);stroke:none;" />

</g>

<defs>

<filter id="b7">

<feGaussianBlur in="SourceGraphic" stdDeviation="4" />

</filter>

</defs>

<g filter="url(#b7)">

<rect x="277" y="81" width="21" height="119" style="fill:url(#f6);stroke:none;" />

</g>

<defs>

<filter id="b8">

<feGaussianBlur in="SourceGraphic" stdDeviation="4" />

</filter>

</defs>

<g filter="url(#b8)">

<rect x="305" y="85" width="21" height="115" style="fill:url(#f7);stroke:none;" />

</g>

<defs>

<filter id="b9">

<feGaussianBlur in="SourceGraphic" stdDeviation="4" />

</filter>

</defs>

<g filter="url(#b9)">

<rect x="332" y="60" width="21" height="140" style="fill:url(#f8);stroke:none;" />

</g>

<defs>

<filter id="b10">

<feGaussianBlur in="SourceGraphic" stdDeviation="4" />

</filter>

</defs>

<g filter="url(#b10)">

<rect x="360" y="65" width="21" height="135" style="fill:url(#f9);stroke:none;" />

</g>

<defs>

<filter id="b11">

<feGaussianBlur in="SourceGraphic" stdDeviation="4" />

</filter>

</defs>

<g filter="url(#b11)">

<rect x="387" y="69" width="21" height="131" style="fill:url(#f10);stroke:none;" />

</g>

<rect x="107" y="204" width="21" height="85" style="fill:url(#f11);stroke:none;" />

<rect x="107" y="204" width="21" height="85" style="fill:none;stroke-width:1;stroke:rgb(0,0,0)" />

<rect x="135" y="204" width="21" height="89" style="fill:url(#f12);stroke:none;" />

<rect x="135" y="204" width="21" height="89" style="fill:none;stroke-width:1;stroke:rgb(0,0,0)" />

<rect x="162" y="65" width="21" height="139" style="fill:url(#f13);stroke:none;" />

<rect x="162" y="65" width="21" height="139" style="fill:none;stroke-width:1;stroke:rgb(0,0,0)" />

<rect x="190" y="72" width="21" height="132" style="fill:url(#f14);stroke:none;" />

<rect x="190" y="72" width="21" height="132" style="fill:none;stroke-width:1;stroke:rgb(0,0,0)" />

<rect x="217" y="118" width="21" height="86" style="fill:url(#f15);stroke:none;" />

<rect x="217" y="118" width="21" height="86" style="fill:none;stroke-width:1;stroke:rgb(0,0,0)" />

<rect x="245" y="76" width="21" height="128" style="fill:url(#f16);stroke:none;" />

<rect x="245" y="76" width="21" height="128" style="fill:none;stroke-width:1;stroke:rgb(0,0,0)" />

<rect x="272" y="85" width="21" height="119" style="fill:url(#f17);stroke:none;" />

<rect x="272" y="85" width="21" height="119" style="fill:none;stroke-width:1;stroke:rgb(0,0,0)" />

<rect x="300" y="89" width="21" height="115" style="fill:url(#f18);stroke:none;" />

<rect x="300" y="89" width="21" height="115" style="fill:none;stroke-width:1;stroke:rgb(0,0,0)" />

<rect x="327" y="64" width="21" height="140" style="fill:url(#f19);stroke:none;" />

<rect x="327" y="64" width="21" height="140" style="fill:none;stroke-width:1;stroke:rgb(0,0,0)" />

<rect x="355" y="69" width="21" height="135" style="fill:url(#f20);stroke:none;" />

<rect x="355" y="69" width="21" height="135" style="fill:none;stroke-width:1;stroke:rgb(0,0,0)" />

<rect x="382" y="73" width="21" height="131" style="fill:url(#f21);stroke:none;" />

<rect x="382" y="73" width="21" height="131" style="fill:none;stroke-width:1;stroke:rgb(0,0,0)" />

<rect x="104" y="204" width="302" height="89" style="fill:rgb(128,128,128);fill-opacity:0.5;stroke:none;" />

<line x1="104" y1="204" x2="406" y2="204" style="stroke:rgb(0,0,0);stroke-width:1" />

<rect x="416.8076" y="184" width="64.3848" height="22.084" rx="6" ry="6" style="fill:rgb(255,255,255);fill-opacity:1;stroke-width:1;stroke:rgb(0,0,0)" />

<text x="448" y="195" font-family="Verdana" font-size="12" font-weight="bold" fill="rgb(0,0,0)" text-anchor="middle" style="baseline-shift:-25%">Legend</text>

<rect x="411" y="212" width="16" height="16" style="fill:rgb(254,255,255);fill-opacity:1;stroke:none;" />

<rect x="411" y="212" width="16" height="16" style="fill:none;stroke-width:1;stroke:rgb(0,0,0)" />

<text x="434" y="212" font-family="Verdana" font-size="12" fill="rgb(0,0,0)" style="baseline-shift:-75%">Series1</text>

<rect x="0" y="0" width="512" height="368" style="fill:none;stroke-width:5;stroke:rgb(255,0,0)" />

<defs>

<linearGradient id="f0" x1="0%" y1="0%" x2="100%" y2="0%">

<stop offset="0" stop-color="rgb(255,255,255)" />

<stop offset="0.2" stop-color="rgb(105,105,105)" />

<stop offset="1" stop-color="rgb(105,105,105)" />

</linearGradient>

<linearGradient id="f1" x1="0%" y1="0%" x2="100%" y2="0%">

<stop offset="0" stop-color="rgb(255,255,255)" />

<stop offset="0.2" stop-color="rgb(105,105,105)" />

<stop offset="1" stop-color="rgb(105,105,105)" />

</linearGradient>

<linearGradient id="f2" x1="0%" y1="0%" x2="100%" y2="0%">

<stop offset="0" stop-color="rgb(255,255,255)" />

<stop offset="0.2" stop-color="rgb(105,105,105)" />

<stop offset="1" stop-color="rgb(105,105,105)" />

</linearGradient>

<linearGradient id="f3" x1="0%" y1="0%" x2="100%" y2="0%">

<stop offset="0" stop-color="rgb(255,255,255)" />

<stop offset="0.2" stop-color="rgb(105,105,105)" />

<stop offset="1" stop-color="rgb(105,105,105)" />

</linearGradient>

<linearGradient id="f4" x1="0%" y1="0%" x2="100%" y2="0%">

<stop offset="0" stop-color="rgb(255,255,255)" />

<stop offset="0.2" stop-color="rgb(105,105,105)" />

<stop offset="1" stop-color="rgb(105,105,105)" />

</linearGradient>

<linearGradient id="f5" x1="0%" y1="0%" x2="100%" y2="0%">

<stop offset="0" stop-color="rgb(255,255,255)" />

<stop offset="0.2" stop-color="rgb(105,105,105)" />

<stop offset="1" stop-color="rgb(105,105,105)" />

</linearGradient>

<linearGradient id="f6" x1="0%" y1="0%" x2="100%" y2="0%">

<stop offset="0" stop-color="rgb(255,255,255)" />

<stop offset="0.2" stop-color="rgb(105,105,105)" />

<stop offset="1" stop-color="rgb(105,105,105)" />

</linearGradient>

<linearGradient id="f7" x1="0%" y1="0%" x2="100%" y2="0%">

<stop offset="0" stop-color="rgb(255,255,255)" />

<stop offset="0.2" stop-color="rgb(105,105,105)" />

<stop offset="1" stop-color="rgb(105,105,105)" />

</linearGradient>

<linearGradient id="f8" x1="0%" y1="0%" x2="100%" y2="0%">

<stop offset="0" stop-color="rgb(255,255,255)" />

<stop offset="0.2" stop-color="rgb(105,105,105)" />

<stop offset="1" stop-color="rgb(105,105,105)" />

</linearGradient>

<linearGradient id="f9" x1="0%" y1="0%" x2="100%" y2="0%">

<stop offset="0" stop-color="rgb(255,255,255)" />

<stop offset="0.2" stop-color="rgb(105,105,105)" />

<stop offset="1" stop-color="rgb(105,105,105)" />

</linearGradient>

<linearGradient id="f10" x1="0%" y1="0%" x2="100%" y2="0%">

<stop offset="0" stop-color="rgb(255,255,255)" />

<stop offset="0.2" stop-color="rgb(105,105,105)" />

<stop offset="1" stop-color="rgb(105,105,105)" />

</linearGradient>

<linearGradient id="f11" x1="0%" y1="0%" x2="0%" y2="100%">

<stop offset="0" stop-color="rgb(255,255,255)" />

<stop offset="1" stop-color="rgb(17,255,255)" />

</linearGradient>

<linearGradient id="f12" x1="0%" y1="0%" x2="0%" y2="100%">

<stop offset="0" stop-color="rgb(255,255,255)" />

<stop offset="1" stop-color="rgb(17,255,255)" />

</linearGradient>

<linearGradient id="f13" x1="0%" y1="0%" x2="0%" y2="100%">

<stop offset="0" stop-color="rgb(17,255,255)" />

<stop offset="1" stop-color="rgb(255,255,255)" />

</linearGradient>

<linearGradient id="f14" x1="0%" y1="0%" x2="0%" y2="100%">

<stop offset="0" stop-color="rgb(17,255,255)" />

<stop offset="1" stop-color="rgb(255,255,255)" />

</linearGradient>

<linearGradient id="f15" x1="0%" y1="0%" x2="0%" y2="100%">

<stop offset="0" stop-color="rgb(17,255,255)" />

<stop offset="1" stop-color="rgb(255,255,255)" />

</linearGradient>

<linearGradient id="f16" x1="0%" y1="0%" x2="0%" y2="100%">

<stop offset="0" stop-color="rgb(17,255,255)" />

<stop offset="1" stop-color="rgb(255,255,255)" />

</linearGradient>

<linearGradient id="f17" x1="0%" y1="0%" x2="0%" y2="100%">

<stop offset="0" stop-color="rgb(17,255,255)" />

<stop offset="1" stop-color="rgb(255,255,255)" />

</linearGradient>

<linearGradient id="f18" x1="0%" y1="0%" x2="0%" y2="100%">

<stop offset="0" stop-color="rgb(17,255,255)" />

<stop offset="1" stop-color="rgb(255,255,255)" />

</linearGradient>

<linearGradient id="f19" x1="0%" y1="0%" x2="0%" y2="100%">

<stop offset="0" stop-color="rgb(17,255,255)" />

<stop offset="1" stop-color="rgb(255,255,255)" />

</linearGradient>

<linearGradient id="f20" x1="0%" y1="0%" x2="0%" y2="100%">

<stop offset="0" stop-color="rgb(17,255,255)" />

<stop offset="1" stop-color="rgb(255,255,255)" />

</linearGradient>

<linearGradient id="f21" x1="0%" y1="0%" x2="0%" y2="100%">

<stop offset="0" stop-color="rgb(17,255,255)" />

<stop offset="1" stop-color="rgb(255,255,255)" />

</linearGradient>

</defs>

</svg>

Analysis

I just want to see the bars and reduce the clutter in the image. When I view the image using the vOICe, I can hear a set of horizontal bars and distinct clicking noises as the soundscape pans from left to right. That is probably the graph paper. There are no significant changes in height. There is something at the top left and a small something at the bottom right. These could be legends and or title text. I am not interested in them. The chart is made up of rectangle, line and text elements. Let us see what happens if we extract all the rectangles before the lines start.

<rect x="0" y="0" width="511" height="367" style="fill:rgb(255,255,255);fill-opacity:1;stroke:none;" />

<rect x="104" y="270" width="302" height="23" style="fill:rgb(228,249,255);fill-opacity:1;stroke:none;" />

<rect x="104" y="247" width="302" height="23" style="fill:rgb(201,243,255);fill-opacity:1;stroke:none;" />

<rect x="104" y="224" width="302" height="23" style="fill:rgb(228,249,255);fill-opacity:1;stroke:none;" />

<rect x="104" y="201" width="302" height="23" style="fill:rgb(201,243,255);fill-opacity:1;stroke:none;" />

<rect x="104" y="178" width="302" height="23" style="fill:rgb(228,249,255);fill-opacity:1;stroke:none;" />

<rect x="104" y="156" width="302" height="22" style="fill:rgb(201,243,255);fill-opacity:1;stroke:none;" />

<rect x="104" y="133" width="302" height="23" style="fill:rgb(228,249,255);fill-opacity:1;stroke:none;" />

<rect x="104" y="110" width="302" height="23" style="fill:rgb(201,243,255);fill-opacity:1;stroke:none;" />

<rect x="104" y="87" width="302" height="23" style="fill:rgb(228,249,255);fill-opacity:1;stroke:none;" />

<rect x="104" y="64" width="302" height="23" style="fill:rgb(201,243,255);fill-opacity:1;stroke:none;" />

The above elements will not parse correctly so we need to complete the SVG file by adding the root node and the end tag for svg.

<?xml version="1.0" encoding="utf-8" standalone="yes"?>

<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"[]>

<svg width="100%" height="100%" viewBox="0 0 512 368" version="1.1" xmlns="http://www.w3.org/2000/svg">

<rect x="0" y="0" width="511" height="367" style="fill:rgb(255,255,255);fill-opacity:1;stroke:none;" />

<rect x="104" y="270" width="302" height="23" style="fill:rgb(228,249,255);fill-opacity:1;stroke:none;" />

<rect x="104" y="247" width="302" height="23" style="fill:rgb(201,243,255);fill-opacity:1;stroke:none;" />

<rect x="104" y="224" width="302" height="23" style="fill:rgb(228,249,255);fill-opacity:1;stroke:none;" />

<rect x="104" y="201" width="302" height="23" style="fill:rgb(201,243,255);fill-opacity:1;stroke:none;" />

<rect x="104" y="178" width="302" height="23" style="fill:rgb(228,249,255);fill-opacity:1;stroke:none;" />

<rect x="104" y="156" width="302" height="22" style="fill:rgb(201,243,255);fill-opacity:1;stroke:none;" />

<rect x="104" y="133" width="302" height="23" style="fill:rgb(228,249,255);fill-opacity:1;stroke:none;" />

<rect x="104" y="110" width="302" height="23" style="fill:rgb(201,243,255);fill-opacity:1;stroke:none;" />

<rect x="104" y="87" width="302" height="23" style="fill:rgb(228,249,255);fill-opacity:1;stroke:none;" />

<rect x="104" y="64" width="302" height="23" style="fill:rgb(201,243,255);fill-opacity:1;stroke:none;" />

</svg>

When I sonify the completed image, I realize that there is something missing. The rectangles are too flat and dull. Therefore, I study the original SVG image and add the <defs> tag with its attributes and text back into the file. I now extract all the line elements in the chart and see what happens.

<?xml version="1.0" encoding="utf-8" standalone="yes"?>

<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"[]>

<svg width="100%" height="100%" viewBox="0 0 512 368" version="1.1" xmlns="http://www.w3.org/2000/svg">

<line x1="99" y1="293" x2="104" y2="293" stroke-dasharray="2,2" style="stroke:rgb(0,0,0);stroke-width:1" />

<line x1="105" y1="293" x2="405" y2="293" style="stroke:rgb(0,0,255);stroke-width:1" />

<line x1="99" y1="270" x2="104" y2="270" stroke-dasharray="2,2" style="stroke:rgb(0,0,0);stroke-width:1" />

<line x1="105" y1="270" x2="405" y2="270" style="stroke:rgb(0,0,255);stroke-width:1" />

<line x1="99" y1="247" x2="104" y2="247" stroke-dasharray="2,2" style="stroke:rgb(0,0,0);stroke-width:1" />

<line x1="105" y1="247" x2="405" y2="247" style="stroke:rgb(0,0,255);stroke-width:1" />

<line x1="99" y1="224" x2="104" y2="224" stroke-dasharray="2,2" style="stroke:rgb(0,0,0);stroke-width:1" />

<line x1="105" y1="224" x2="405" y2="224" style="stroke:rgb(0,0,255);stroke-width:1" />

<line x1="99" y1="201" x2="104" y2="201" stroke-dasharray="2,2" style="stroke:rgb(0,0,0);stroke-width:1" />

<line x1="105" y1="201" x2="405" y2="201" style="stroke:rgb(0,0,255);stroke-width:1" />

<line x1="99" y1="178" x2="104" y2="178" stroke-dasharray="2,2" style="stroke:rgb(0,0,0);stroke-width:1" />

<line x1="105" y1="178" x2="405" y2="178" style="stroke:rgb(0,0,255);stroke-width:1" />

<line x1="99" y1="156" x2="104" y2="156" stroke-dasharray="2,2" style="stroke:rgb(0,0,0);stroke-width:1" />

<line x1="105" y1="156" x2="405" y2="156" style="stroke:rgb(0,0,255);stroke-width:1" />

<line x1="99" y1="133" x2="104" y2="133" stroke-dasharray="2,2" style="stroke:rgb(0,0,0);stroke-width:1" />

<line x1="105" y1="133" x2="405" y2="133" style="stroke:rgb(0,0,255);stroke-width:1" />

<line x1="99" y1="110" x2="104" y2="110" stroke-dasharray="2,2" style="stroke:rgb(0,0,0);stroke-width:1" />

<line x1="105" y1="110" x2="405" y2="110" style="stroke:rgb(0,0,255);stroke-width:1" />

<line x1="99" y1="87" x2="104" y2="87" stroke-dasharray="2,2" style="stroke:rgb(0,0,0);stroke-width:1" />

<line x1="105" y1="87" x2="405" y2="87" style="stroke:rgb(0,0,255);stroke-width:1" />

<line x1="99" y1="64" x2="104" y2="64" stroke-dasharray="2,2" style="stroke:rgb(0,0,0);stroke-width:1" />

<line x1="105" y1="64" x2="405" y2="64" style="stroke:rgb(0,0,255);stroke-width:1" />

<line x1="131" y1="65" x2="131" y2="292" style="stroke:rgb(0,0,255);stroke-width:1" />

<line x1="159" y1="65" x2="159" y2="292" style="stroke:rgb(0,0,255);stroke-width:1" />

<line x1="186" y1="65" x2="186" y2="292" style="stroke:rgb(0,0,255);stroke-width:1" />

<line x1="214" y1="65" x2="214" y2="292" style="stroke:rgb(0,0,255);stroke-width:1" />

<line x1="241" y1="65" x2="241" y2="292" style="stroke:rgb(0,0,255);stroke-width:1" />

<line x1="269" y1="65" x2="269" y2="292" style="stroke:rgb(0,0,255);stroke-width:1" />

<line x1="296" y1="65" x2="296" y2="292" style="stroke:rgb(0,0,255);stroke-width:1" />

<line x1="324" y1="65" x2="324" y2="292" style="stroke:rgb(0,0,255);stroke-width:1" />

<line x1="351" y1="65" x2="351" y2="292" style="stroke:rgb(0,0,255);stroke-width:1" />

<line x1="379" y1="65" x2="379" y2="292" style="stroke:rgb(0,0,255);stroke-width:1" />

<line x1="131" y1="294" x2="131" y2="298" style="stroke:rgb(0,0,0);stroke-width:1" />

<line x1="159" y1="294" x2="159" y2="298" style="stroke:rgb(0,0,0);stroke-width:1" />

<line x1="186" y1="294" x2="186" y2="298" style="stroke:rgb(0,0,0);stroke-width:1" />

<line x1="214" y1="294" x2="214" y2="298" style="stroke:rgb(0,0,0);stroke-width:1" />

<line x1="241" y1="294" x2="241" y2="298" style="stroke:rgb(0,0,0);stroke-width:1" />

<line x1="269" y1="294" x2="269" y2="298" style="stroke:rgb(0,0,0);stroke-width:1" />

<line x1="296" y1="294" x2="296" y2="298" style="stroke:rgb(0,0,0);stroke-width:1" />

<line x1="324" y1="294" x2="324" y2="298" style="stroke:rgb(0,0,0);stroke-width:1" />

<line x1="351" y1="294" x2="351" y2="298" style="stroke:rgb(0,0,0);stroke-width:1" />

<line x1="379" y1="294" x2="379" y2="298" style="stroke:rgb(0,0,0);stroke-width:1" />

<line x1="104" y1="64" x2="104" y2="293" style="stroke:rgb(0,0,0);stroke-width:1" />

<line x1="406" y1="64" x2="406" y2="293" style="stroke:rgb(0,0,0);stroke-width:1" />

<line x1="104" y1="64" x2="406" y2="64" style="stroke:rgb(0,0,0);stroke-width:1" />

<line x1="104" y1="293" x2="406" y2="293" style="stroke:rgb(0,0,0);stroke-width:1" />

</svg>

I do get the graph paper if I keep the styles. The graph is still not as clean as I like. I start examining the lines very closely. I look for lines that have similar set of coordinates which will tell me that they belong to the same visual feature. The first thing I spot is that there are a bunch of lines with x=”99”. Let us see what happens when we remove them.

<?xml version="1.0" encoding="utf-8" standalone="yes"?>

<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"[]>

<svg width="100%" height="100%" viewBox="0 0 512 368" version="1.1" xmlns="http://www.w3.org/2000/svg">

<line x1="131" y1="65" x2="131" y2="292" style="stroke:rgb(0,0,255);stroke-width:1" />

<line x1="159" y1="65" x2="159" y2="292" style="stroke:rgb(0,0,255);stroke-width:1" />

<line x1="186" y1="65" x2="186" y2="292" style="stroke:rgb(0,0,255);stroke-width:1" />

<line x1="214" y1="65" x2="214" y2="292" style="stroke:rgb(0,0,255);stroke-width:1" />

<line x1="241" y1="65" x2="241" y2="292" style="stroke:rgb(0,0,255);stroke-width:1" />

<line x1="269" y1="65" x2="269" y2="292" style="stroke:rgb(0,0,255);stroke-width:1" />

<line x1="296" y1="65" x2="296" y2="292" style="stroke:rgb(0,0,255);stroke-width:1" />

<line x1="324" y1="65" x2="324" y2="292" style="stroke:rgb(0,0,255);stroke-width:1" />

<line x1="351" y1="65" x2="351" y2="292" style="stroke:rgb(0,0,255);stroke-width:1" />

<line x1="379" y1="65" x2="379" y2="292" style="stroke:rgb(0,0,255);stroke-width:1" />

<line x1="131" y1="294" x2="131" y2="298" style="stroke:rgb(0,0,0);stroke-width:1" />

<line x1="159" y1="294" x2="159" y2="298" style="stroke:rgb(0,0,0);stroke-width:1" />

<line x1="186" y1="294" x2="186" y2="298" style="stroke:rgb(0,0,0);stroke-width:1" />

<line x1="214" y1="294" x2="214" y2="298" style="stroke:rgb(0,0,0);stroke-width:1" />

<line x1="241" y1="294" x2="241" y2="298" style="stroke:rgb(0,0,0);stroke-width:1" />

<line x1="269" y1="294" x2="269" y2="298" style="stroke:rgb(0,0,0);stroke-width:1" />

<line x1="296" y1="294" x2="296" y2="298" style="stroke:rgb(0,0,0);stroke-width:1" />

<line x1="324" y1="294" x2="324" y2="298" style="stroke:rgb(0,0,0);stroke-width:1" />

<line x1="351" y1="294" x2="351" y2="298" style="stroke:rgb(0,0,0);stroke-width:1" />

<line x1="379" y1="294" x2="379" y2="298" style="stroke:rgb(0,0,0);stroke-width:1" />

<line x1="104" y1="64" x2="104" y2="293" style="stroke:rgb(0,0,0);stroke-width:1" />

<line x1="406" y1="64" x2="406" y2="293" style="stroke:rgb(0,0,0);stroke-width:1" />

<line x1="104" y1="64" x2="406" y2="64" style="stroke:rgb(0,0,0);stroke-width:1" />

<line x1="104" y1="293" x2="406" y2="293" style="stroke:rgb(0,0,0);stroke-width:1" />

<defs>

<filter id="b1">

<feGaussianBlur in="SourceGraphic" stdDeviation="4" />

</filter>

</defs>

<g filter="url(#b1)">

<rect x="112" y="200" width="21" height="85" style="fill:url(#f0);stroke:none;" />

</g>

<defs>

<filter id="b2">

<feGaussianBlur in="SourceGraphic" stdDeviation="4" />

</filter>

</defs>

<g filter="url(#b2)">

<rect x="140" y="200" width="21" height="89" style="fill:url(#f1);stroke:none;" />

</g>

<defs>

<filter id="b3">

<feGaussianBlur in="SourceGraphic" stdDeviation="4" />

</filter>

</defs>

<g filter="url(#b3)">

<rect x="167" y="61" width="21" height="139" style="fill:url(#f2);stroke:none;" />

</g>

<defs>

<filter id="b4">

<feGaussianBlur in="SourceGraphic" stdDeviation="4" />

</filter>

</defs>

<g filter="url(#b4)">

<rect x="195" y="68" width="21" height="132" style="fill:url(#f3);stroke:none;" />

</g>

<defs>

<filter id="b5">

<feGaussianBlur in="SourceGraphic" stdDeviation="4" />

</filter>

</defs>

<g filter="url(#b5)">

<rect x="222" y="114" width="21" height="86" style="fill:url(#f4);stroke:none;" />

</g>

<defs>

<filter id="b6">

<feGaussianBlur in="SourceGraphic" stdDeviation="4" />

</filter>

</defs>

<g filter="url(#b6)">

<rect x="250" y="72" width="21" height="128" style="fill:url(#f5);stroke:none;" />

</g>

<defs>

<filter id="b7">

<feGaussianBlur in="SourceGraphic" stdDeviation="4" />

</filter>

</defs>

<g filter="url(#b7)">

<rect x="277" y="81" width="21" height="119" style="fill:url(#f6);stroke:none;" />

</g>

<defs>

<filter id="b8">

<feGaussianBlur in="SourceGraphic" stdDeviation="4" />

</filter>

</defs>

<g filter="url(#b8)">

<rect x="305" y="85" width="21" height="115" style="fill:url(#f7);stroke:none;" />

</g>

<defs>

<filter id="b9">

<feGaussianBlur in="SourceGraphic" stdDeviation="4" />

</filter>

</defs>

<g filter="url(#b9)">

<rect x="332" y="60" width="21" height="140" style="fill:url(#f8);stroke:none;" />

</g>

<defs>

<filter id="b10">

<feGaussianBlur in="SourceGraphic" stdDeviation="4" />

</filter>

</defs>

<g filter="url(#b10)">

<rect x="360" y="65" width="21" height="135" style="fill:url(#f9);stroke:none;" />

</g>

<defs>

<filter id="b11">

<feGaussianBlur in="SourceGraphic" stdDeviation="4" />

</filter>

</defs>

<g filter="url(#b11)">

<rect x="387" y="69" width="21" height="131" style="fill:url(#f10);stroke:none;" />

</g>

<rect x="107" y="204" width="21" height="85" style="fill:url(#f11);stroke:none;" />

<rect x="107" y="204" width="21" height="85" style="fill:none;stroke-width:1;stroke:rgb(0,0,0)" />

<rect x="135" y="204" width="21" height="89" style="fill:url(#f12);stroke:none;" />

<rect x="135" y="204" width="21" height="89" style="fill:none;stroke-width:1;stroke:rgb(0,0,0)" />

<rect x="162" y="65" width="21" height="139" style="fill:url(#f13);stroke:none;" />

<rect x="162" y="65" width="21" height="139" style="fill:none;stroke-width:1;stroke:rgb(0,0,0)" />

<rect x="190" y="72" width="21" height="132" style="fill:url(#f14);stroke:none;" />

<rect x="190" y="72" width="21" height="132" style="fill:none;stroke-width:1;stroke:rgb(0,0,0)" />

<rect x="217" y="118" width="21" height="86" style="fill:url(#f15);stroke:none;" />

<rect x="217" y="118" width="21" height="86" style="fill:none;stroke-width:1;stroke:rgb(0,0,0)" />

<rect x="245" y="76" width="21" height="128" style="fill:url(#f16);stroke:none;" />

<rect x="245" y="76" width="21" height="128" style="fill:none;stroke-width:1;stroke:rgb(0,0,0)" />

<rect x="272" y="85" width="21" height="119" style="fill:url(#f17);stroke:none;" />

<rect x="272" y="85" width="21" height="119" style="fill:none;stroke-width:1;stroke:rgb(0,0,0)" />

<rect x="300" y="89" width="21" height="115" style="fill:url(#f18);stroke:none;" />

<rect x="300" y="89" width="21" height="115" style="fill:none;stroke-width:1;stroke:rgb(0,0,0)" />

<rect x="327" y="64" width="21" height="140" style="fill:url(#f19);stroke:none;" />

<rect x="327" y="64" width="21" height="140" style="fill:none;stroke-width:1;stroke:rgb(0,0,0)" />

<rect x="355" y="69" width="21" height="135" style="fill:url(#f20);stroke:none;" />

<rect x="355" y="69" width="21" height="135" style="fill:none;stroke-width:1;stroke:rgb(0,0,0)" />

<rect x="382" y="73" width="21" height="131" style="fill:url(#f21);stroke:none;" />

<rect x="382" y="73" width="21" height="131" style="fill:none;stroke-width:1;stroke:rgb(0,0,0)" />

<rect x="104" y="204" width="302" height="89" style="fill:rgb(128,128,128);fill-opacity:0.5;stroke:none;" />

<line x1="104" y1="204" x2="406" y2="204" style="stroke:rgb(0,0,0);stroke-width:1" />

<rect x="416.8076" y="184" width="64.3848" height="22.084" rx="6" ry="6" style="fill:rgb(255,255,255);fill-opacity:1;stroke-width:1;stroke:rgb(0,0,0)" />

<text x="448" y="195" font-family="Verdana" font-size="12" font-weight="bold" fill="rgb(0,0,0)" text-anchor="middle" style="baseline-shift:-25%">Legend</text>

<rect x="411" y="212" width="16" height="16" style="fill:rgb(254,255,255);fill-opacity:1;stroke:none;" />

<rect x="411" y="212" width="16" height="16" style="fill:none;stroke-width:1;stroke:rgb(0,0,0)" />

<text x="434" y="212" font-family="Verdana" font-size="12" fill="rgb(0,0,0)" style="baseline-shift:-75%">Series1</text>

<rect x="0" y="0" width="512" height="368" style="fill:none;stroke-width:5;stroke:rgb(255,0,0)" />

<defs>

<linearGradient id="f0" x1="0%" y1="0%" x2="100%" y2="0%">

<stop offset="0" stop-color="rgb(255,255,255)" />

<stop offset="0.2" stop-color="rgb(105,105,105)" />

<stop offset="1" stop-color="rgb(105,105,105)" />

</linearGradient>

<linearGradient id="f1" x1="0%" y1="0%" x2="100%" y2="0%">

<stop offset="0" stop-color="rgb(255,255,255)" />

<stop offset="0.2" stop-color="rgb(105,105,105)" />

<stop offset="1" stop-color="rgb(105,105,105)" />

</linearGradient>

<linearGradient id="f2" x1="0%" y1="0%" x2="100%" y2="0%">

<stop offset="0" stop-color="rgb(255,255,255)" />

<stop offset="0.2" stop-color="rgb(105,105,105)" />

<stop offset="1" stop-color="rgb(105,105,105)" />

</linearGradient>

<linearGradient id="f3" x1="0%" y1="0%" x2="100%" y2="0%">

<stop offset="0" stop-color="rgb(255,255,255)" />

<stop offset="0.2" stop-color="rgb(105,105,105)" />

<stop offset="1" stop-color="rgb(105,105,105)" />

</linearGradient>

<linearGradient id="f4" x1="0%" y1="0%" x2="100%" y2="0%">

<stop offset="0" stop-color="rgb(255,255,255)" />

<stop offset="0.2" stop-color="rgb(105,105,105)" />

<stop offset="1" stop-color="rgb(105,105,105)" />

</linearGradient>

<linearGradient id="f5" x1="0%" y1="0%" x2="100%" y2="0%">

<stop offset="0" stop-color="rgb(255,255,255)" />

<stop offset="0.2" stop-color="rgb(105,105,105)" />

<stop offset="1" stop-color="rgb(105,105,105)" />

</linearGradient>

<linearGradient id="f6" x1="0%" y1="0%" x2="100%" y2="0%">

<stop offset="0" stop-color="rgb(255,255,255)" />

<stop offset="0.2" stop-color="rgb(105,105,105)" />

<stop offset="1" stop-color="rgb(105,105,105)" />

</linearGradient>

<linearGradient id="f7" x1="0%" y1="0%" x2="100%" y2="0%">

<stop offset="0" stop-color="rgb(255,255,255)" />

<stop offset="0.2" stop-color="rgb(105,105,105)" />

<stop offset="1" stop-color="rgb(105,105,105)" />

</linearGradient>

<linearGradient id="f8" x1="0%" y1="0%" x2="100%" y2="0%">

<stop offset="0" stop-color="rgb(255,255,255)" />

<stop offset="0.2" stop-color="rgb(105,105,105)" />

<stop offset="1" stop-color="rgb(105,105,105)" />

</linearGradient>

<linearGradient id="f9" x1="0%" y1="0%" x2="100%" y2="0%">

<stop offset="0" stop-color="rgb(255,255,255)" />

<stop offset="0.2" stop-color="rgb(105,105,105)" />

<stop offset="1" stop-color="rgb(105,105,105)" />

</linearGradient>

<linearGradient id="f10" x1="0%" y1="0%" x2="100%" y2="0%">

<stop offset="0" stop-color="rgb(255,255,255)" />

<stop offset="0.2" stop-color="rgb(105,105,105)" />

<stop offset="1" stop-color="rgb(105,105,105)" />

</linearGradient>

<linearGradient id="f11" x1="0%" y1="0%" x2="0%" y2="100%">

<stop offset="0" stop-color="rgb(255,255,255)" />

<stop offset="1" stop-color="rgb(17,255,255)" />

</linearGradient>

<linearGradient id="f12" x1="0%" y1="0%" x2="0%" y2="100%">

<stop offset="0" stop-color="rgb(255,255,255)" />

<stop offset="1" stop-color="rgb(17,255,255)" />

</linearGradient>

<linearGradient id="f13" x1="0%" y1="0%" x2="0%" y2="100%">

<stop offset="0" stop-color="rgb(17,255,255)" />

<stop offset="1" stop-color="rgb(255,255,255)" />

</linearGradient>

<linearGradient id="f14" x1="0%" y1="0%" x2="0%" y2="100%">

<stop offset="0" stop-color="rgb(17,255,255)" />

<stop offset="1" stop-color="rgb(255,255,255)" />

</linearGradient>

<linearGradient id="f15" x1="0%" y1="0%" x2="0%" y2="100%">

<stop offset="0" stop-color="rgb(17,255,255)" />

<stop offset="1" stop-color="rgb(255,255,255)" />

</linearGradient>

<linearGradient id="f16" x1="0%" y1="0%" x2="0%" y2="100%">

<stop offset="0" stop-color="rgb(17,255,255)" />

<stop offset="1" stop-color="rgb(255,255,255)" />

</linearGradient>

<linearGradient id="f17" x1="0%" y1="0%" x2="0%" y2="100%">

<stop offset="0" stop-color="rgb(17,255,255)" />

<stop offset="1" stop-color="rgb(255,255,255)" />

</linearGradient>

<linearGradient id="f18" x1="0%" y1="0%" x2="0%" y2="100%">

<stop offset="0" stop-color="rgb(17,255,255)" />

<stop offset="1" stop-color="rgb(255,255,255)" />

</linearGradient>

<linearGradient id="f19" x1="0%" y1="0%" x2="0%" y2="100%">

<stop offset="0" stop-color="rgb(17,255,255)" />

<stop offset="1" stop-color="rgb(255,255,255)" />

</linearGradient>

<linearGradient id="f20" x1="0%" y1="0%" x2="0%" y2="100%">

<stop offset="0" stop-color="rgb(17,255,255)" />

<stop offset="1" stop-color="rgb(255,255,255)" />

</linearGradient>

<linearGradient id="f21" x1="0%" y1="0%" x2="0%" y2="100%">

<stop offset="0" stop-color="rgb(17,255,255)" />

<stop offset="1" stop-color="rgb(255,255,255)" />

</linearGradient>

</defs>

</svg>

This result is better but we are still not there. I continue the exercise but I switch to checking for the y coordinates since the x1 coordinates are changing rapidlly. I follow the same procedure as above. I am trying to simplify the image by starting from the bottom of the coordinate space. You can start from the top, It makes no difference. The reason I start from the bottom is that I want to isolate the high thin line in the graph. I finally have the following image.

<?xml version="1.0" encoding="utf-8" standalone="yes"?>

<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"[]>

<svg width="100%" height="100%" viewBox="0 0 512 368" version="1.1" xmlns="http://www.w3.org/2000/svg">

<line x1="105" y1="293" x2="405" y2="293" style="stroke:rgb(0,0,255);stroke-width:1" />

</svg>

This is good enough since I can now hear the highpitched line clearly.

References

Item

Link

Scalable Vector Graphics

http://www.w3.org/Graphics/SVG/

The vOICe

http://www.seeingwithsound.com

IVEO from Viewplus Technologies

http://www.viewplus.com/products/software/hands-on-learning/


Return to home page


This work is licensed under a Creative Commons Attribution 3.0 Unported License

Valid HTML 4.01 Strict