SVG is fun for sure, but is it really needed to be that complex.
This kind of stuff is easy enough to achieve with basic HTML elements.
[{"id":"8d516329880a7b2d","type":"random","z":"9141c3fbcc7d9e2b","name":"","low":"-100","high":"0","inte":"true","property":"payload","x":480,"y":520,"wires":[["463566f7274c285b"]]},{"id":"a230737c1703a91e","type":"inject","z":"9141c3fbcc7d9e2b","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"3","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":310,"y":520,"wires":[["8d516329880a7b2d"]]},{"id":"d02a005c014fb48b","type":"ui_template","z":"9141c3fbcc7d9e2b","group":"f6124e036e2d2ffb","name":"DIY level","order":0,"width":0,"height":0,"format":"<style>\n.level{\n position:absolute;\n inset:0;\n top:50%;\n bottom:15%;\n background:repeating-linear-gradient( 90deg, green, green 5px, transparent 5px, transparent 8px);\n width:calc(1% * var(--size));\n}\n.value{\n position:absolute;\n text-align:center;\n inset:0;\n}\n.limits{\n font-size:10px;\n}\n.min{\n position:absolute;\n}\n.max{\n position:absolute;\n right:0;\n margin-right:4px;\n}\n.top{\n background:red;\n position:absolute;\n inset:0;\n top:95%;\n width:calc(1% * var(--top));\n \n}\n</style>\n\n<div id=\"{{'level_min_'+$id}}\" class=\"limits min\">-100</div>\n<div id=\"{{'level_max_'+$id}}\" class=\"limits max\">0</div>\n<div id=\"{{'level_val_'+$id}}\" class=\"value\"></div>\n<div id=\"{{'level_'+$id}}\" class=\"level\"></div>\n<div id=\"{{'level_top'+$id}}\" class=\"top\"></div>\n\n<script>\n (function(scope) {\n const min = -100\n const max = 0\n const label = \"DIY Level \"\n const unit = \" dBm\"\n scope.$watch('msg', function(msg) {\n if (msg) {\n // Do something when msg arrives\n const v = Math.floor(((msg.payload - min) / (max - min)) * 100);\n const t = Math.floor(((msg.top - min) / (max - min)) * 100);\n document.getElementById('level_'+scope.$id).style.setProperty('--size', v);\n document.getElementById('level_top'+scope.$id).style.setProperty('--top', t);\n document.getElementById('level_val_'+scope.$id).textContent = label + msg.payload + unit;\n }\n });\n})(scope);\n</script>","storeOutMessages":true,"fwdInMessages":true,"resendOnRefresh":true,"templateScope":"local","className":"","x":780,"y":520,"wires":[[]]},{"id":"463566f7274c285b","type":"function","z":"9141c3fbcc7d9e2b","name":"","func":"let last = context.get('last') || Number.MIN_SAFE_INTEGER\nif(msg.payload > last){\n last = msg.payload;\n context.set('last',last)\n}\nmsg.top = last\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":620,"y":520,"wires":[["d02a005c014fb48b"]]},{"id":"f6124e036e2d2ffb","type":"ui_group","name":"Default","tab":"34ab7d39f3e308fc","order":1,"disp":true,"width":"6","collapse":false,"className":""},{"id":"34ab7d39f3e308fc","type":"ui_tab","name":"Home","icon":"dashboard","disabled":false,"hidden":false}]