Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support asymptote diagrams #55

Closed
mgajda opened this issue Nov 5, 2022 · 3 comments · Fixed by #61
Closed

Support asymptote diagrams #55

mgajda opened this issue Nov 5, 2022 · 3 comments · Fixed by #61
Labels
enhancement New feature or request

Comments

@mgajda
Copy link
Contributor

mgajda commented Nov 5, 2022

It would be nice to support asymptote diagramming tool for function charts: https://asymptote.sourceforge.io/

@LaurentRDC LaurentRDC added the enhancement New feature or request label Nov 5, 2022
@LaurentRDC
Copy link
Owner

Hello,

Just like for the Penrose backend (#54), can you provide me with:

  1. An example script;
  2. A shell command or script to generate an output file, for example an EPS or PDF?

@mgajda
Copy link
Contributor Author

mgajda commented Sep 8, 2023

Generates the PDF from input.asy to output.pdf with command asy -o output.pdf input.asy or asy -outname output.pdf input.asy.

An example script:

import graph;

size(9cm,8cm,IgnoreAspect);
string data="westnile.csv";

file in=input(data).line().csv();

string[] columnlabel=in;

real[][] A=in;
A=transpose(A);
real[] number=A[0], survival=A[1];

path g=graph(number,survival);
draw(g);

scale(true);

xaxis("Initial no.\ of mosquitoes per bird ($S_{M_0}/N_{B_0}$)",
      Bottom,LeftTicks);
xaxis(Top);
yaxis("Susceptible bird survival",Left,RightTicks(trailingzero));
yaxis(Right);

real a=number[0];
real b=number[number.length-1];

real S1=0.475;
path h1=(a,S1)--(b,S1);
real M1=interp(a,b,intersect(h1,g)[0]);

real S2=0.9;
path h2=(a,S2)--(b,S2);
real M2=interp(a,b,intersect(h2,g)[0]);

labelx("$M_1$",M1);
labelx("$M_2$",M2);

draw((a,S2)--(M2,S2)--(M2,0),Dotted);
draw((a,S1)--(M1,S1)--(M1,0),dashed);

pen p=fontsize(10pt);

real y3=0.043;
path reduction=(M1,y3)--(M2,y3);
draw(reduction,Arrow,TrueMargin(0,0.5*(linewidth(Dotted)+linewidth())));

arrow(shift(-20,5)*Label(minipage("\flushleft{\begin{itemize}\item[1.]
Estimate proportion of birds surviving at end of season\end{itemize}}",100),
                         align=NNE),
      (M1,S1),NNE,1cm,p,Arrow(NoFill));

arrow(shift(-24,5)*Label(minipage("\flushleft{\begin{itemize}\item[2.]
Read off initial mosquito abundance\end{itemize}}",80),align=NNE),
      (M1,0),NE,2cm,p,Arrow(NoFill));

arrow(shift(20,0)*Label(minipage("\flushleft{\begin{itemize}\item[3.]
Determine desired bird survival for next season\end{itemize}}",90),align=SW),
      (M2,S2),SW,arrowlength,p,Arrow(NoFill));

arrow(shift(8,-15)*Label(minipage("\flushleft{\begin{itemize}\item[4.]
Calculate required proportional reduction in mosquitoes\end{itemize}}",90),
                         align=NW),
      point(reduction,0.5),NW,1.5cm,p,Arrow(NoFill));

Script taken from the Asymptote gallery: https://asymptote.sourceforge.io/gallery/2Dgraphs/westnile.asy

The Asymptote is distributed as Debian/Ubuntu package, and TeXLive package: apt-get install asymptote.

@mgajda
Copy link
Contributor Author

mgajda commented Sep 13, 2023

Please note that while PDF, EPS, and PNG work out of the box on Debian/Ubuntu installations,
the SVG, JPG output fails due to stringent ImageMagick security policy.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants