可以使用circle svg命令在svg gnuplot终端中绘制圆形吗?

时间:2019-06-15 19:04:41

标签: svg optimization gnuplot

我想使用the family of circles绘制gnuplot svg terminal

enter image description here

Svg为此拥有a command circle。我发现的所有图像都使用svg path而不是圆形,但是圆形比较好,因为它的尺寸较小(optimisation)。

the gnuplot source code中,我找不到任何用于使用svg circle的命令

grep -nR "circle"

是否可以在gnuplot中绘制圆,从而给出圆而不是路径svg命令?

3 个答案:

答案 0 :(得分:2)

点类型5和6被实现为

     /*  5 circle */
     "\t<circle id='gpPt5' stroke-width='%.3f' stroke='currentColor' cx='0' cy='0' r='1'/>\n"
     /*  6 circle (disk)         filled */
     "\t<use xlink:href='#gpPt5' id='gpPt6' fill='currentColor' stroke='none'/>\n"

因此,原则上您可以放置​​很多点,更改每个点的x,y位置和大小。实际上这将很麻烦,因为“ pointsize”的单位与绘图的轴坐标没有关系。您将不得不凭经验确定比例因子,如果您更改了绘图大小或布局的任何内容,它都会改变。

这是一个原理证明的例子:

unset border
unset tics
set size square
set angle degree
plot sample [t=0:720] '+' using ($1*cos($1)):($1*sin($1)):($1/100.) with points pt 6 ps var

enter image description here

答案 1 :(得分:1)

嗯,SVG文件基本上是文本文件。因此,每个可以进行一些计算并导出一些文本的程序原则上都可以创建这样的SVG文件。 一次尝试...(待优化)。基本上,我从一个单个圆圈的Inkscape SVG文件开始,以获取围绕实际圆圈的文本。 现在,gnuplot生成此“页眉”和“页脚”以及一系列圆圈。

代码:

### generate svg output
reset session

Header = \
'<?xml version="1.0" encoding="UTF-8"?> '."\n".\
'<!-- Created with Inkscape (http://www.inkscape.org/) --> '."\n".\
'<svg width="200mm" height="200mm" version="1.1" viewBox="0 0 200 200" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> '."\n".\
' <metadata> '."\n".\
'  <rdf:RDF> '."\n".\
'   <cc:Work rdf:about=""> '."\n".\
'    <dc:format>image/svg+xml</dc:format> '."\n".\
'    <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> '."\n".\
'    <dc:title/> '."\n".\
'   </cc:Work> '."\n".\
'  </rdf:RDF> '."\n".\
' </metadata> '

CircleTemplate = \
' <circle cx="'.'%g'.'" cy="'.'%g'.'" r="'.'%g'.'" fill="none" stroke="#f00" stroke-linecap="round" stroke-width=".1" style="paint-order:stroke markers fill"/> '

Footer = ' </svg> '

set print "Circles.svg"
    print Header
    Max = 90.
    Factor1 = 12.
    Factor2 = 2.5
    do for [i=5:Max] {
        print sprintf(CircleTemplate,100+Factor2*i/Max*cos(i*pi/Max*Factor1),100+Factor2*i/Max*sin(i*pi/Max*Factor1),i)
    }
    print Footer
set print
### end of code

结果:

enter image description here

答案 2 :(得分:0)

这是不可能的。我做了a feature request