Page 1 sur 1

echelle+graduation

Posté : sam. 18 avr. 2020, 10:08
par zariski
Essais_ASY.pdf
(5.53 Kio) Téléchargé 386 fois
Bonjour,
Voilà mon problème :
je n'arrive pas à faire apparaître l'étiquette de chaque graduation, à savoir :
2^1,2^2,2^3,... sur l'axe vertical et 10^-1,10^0,10^1,10^2,.. sur l'axe horizontal
Si quelqu'un avait une solution elle serait la bienvenue, MERCI.

Pardonnez-moi mais j'ai bien insérer mon code entre les balises sauf que le temps de compilation est trop grand, aussi je le donne brut …

//----------------------------------------------------------------------------------------------------------------------------------------
import graph_pi;//Charge graph, markers et base_pi + usepackage("mathrsfs");
import patterns;
import math;
import geometry;

usepackage("fourier");
usepackage("amsmath");
usepackage("siunitx", "locale=DE");

unitsize(1cm,1cm);

real xmin = 0.1,
xmax = 1e4,
xStep = 1,
xstep = 0.1,
x0 = 0.1, //abscisse de l'origine du repère
ymin = 1,
ymax = 16,
yStep = 1,
ystep = 0.1,
y0 = 1; //ordonnée de l'origine du repère

//<-------- Base-10 logarithmic scale on x-axis: -------------------------->
real log10Down(real x) {return log10(x);}
real pow10Down(real x) {return pow10(x);}

scaleT xscale=scaleT(log10Down,pow10Down,logarithmic=true);
//<------------------------------------------------------------------------->


//<-------- Base-2 logarithmic scale on y-axis: -------------------------->
real log2(real x) {static real log2=log(2); return log(x)/log2;}
real pow2(real x) {return 2^x;}

scaleT yscale=scaleT(log2,pow2,logarithmic=true);
//<------------------------------------------------------------------------->

scale(xscale,yscale);



//<------ La grille... sans les graduations ! ----------------------------->
xlimits(xmin,xmax);
ylimits(ymin,ymax);
pen pBord = nullpen,
pGrille = 0.05mm +rgb(0.97,0.72,0.02);

// Lignes verticales
xaxis(axis = BottomTop,
p = pBord,
ticks = Ticks("%",
Step = xStep,
step = xstep,
pTick = 0.05mm + black,
ptick = pGrille,
extend = true)
);
// Lignes horizontales
yaxis(axis = LeftRight,
p = pBord,
ticks = Ticks("%",
Step = yStep,
step = ystep,
pTick = 0.05mm + black,
ptick = pGrille,
extend = true)
);
//<------------------------------------------------------------------------>


//<---------- Les axes --------------------------------------------------->
pen stylo=fontsize(5pt);



// axe horizontal d'équation y=y0
yequals(y = y0,
xmin = xmin,
xmax = xmax ,
p = stylo + blue,
Ticks(format=Label(Fill(paleblue)),
Size = 1,
end = false,
endlabel = false,
Step = xStep,
step = xstep
),
arrow = Arrow(HookHead,size=1.5mm) //Pointe de flêche
);
//label("x",(xmax+xStep/2,ymin+y0),S,stylo);



// axe vertical d'équation x=x0
xequals(x = x0,
ymin = ymin,
ymax = ymax ,
p = stylo + red,
Ticks(format=Label(Fill(palered)),
Size = 1,
end = false,
endlabel = false,
Step = yStep),
arrow = Arrow(HookHead,size=1.5mm) //Pointe de flêche
);
//label("y",(xmin+x0,ymax+yStep/2),W,stylo);
//<------------------------------------------------------------------------>
//-----------------------------------------------------------------------------------------------------

Re: echelle+graduation

Posté : sam. 18 avr. 2020, 11:38
par GM
Bonjour,

une source d'inspiration... à compléter avec les lignes que j'ai enlevées pour rajouter les axes.

NB : pour le log décimal, il ne fallait pas réinventer ce qui existe.

Figure asymptote a3af6e215668f42468d13ad348d0c722
*** Pour masquer/découvrir le code Asymptote qui a permis de créer la figure, il faut cliquer dessus. ;-) ***

CODE ASYMPTOTE de la figure ci-dessus : Tout sélectionner
  1. import graph_pi;//Charge graph, markers et base_pi + usepackage("mathrsfs");
  2. import patterns;
  3. import math;
  4. import geometry;
  5.  
  6. usepackage("fourier");
  7. usepackage("amsmath");
  8. usepackage("siunitx", "locale=DE");
  9.  
  10. unitsize(2cm,2cm);
  11.  
  12. real xmin = 0.1,
  13. xmax = 1e4,
  14. xStep = 1,
  15. xstep = 0.1,
  16. x0 = 0.1, //abscisse de l'origine du repère
  17. ymin = 1,
  18. ymax = 16,
  19. yStep = 1,
  20. ystep = 0.1,
  21. y0 = 1; //ordonnée de l'origine du repère
  22.  
  23. //<-------- Base-2 logarithmic scale on y-axis: -------------------------->
  24. real log2(real x) {static real log2=log(2); return log(x)/log2;}
  25. real pow2(real x) {return 2^x;}
  26.  
  27. scaleT yscale=scaleT(log2,pow2,logarithmic=true);
  28. //<------------------------------------------------------------------------->
  29.  
  30. scale(Log,yscale);
  31.  
  32. //<------ La grille ----------------------------->
  33. xlimits(xmin,xmax);
  34. ylimits(ymin,ymax);
  35.  
  36. pen pBord = nullpen,
  37. pGrille = 0.05mm +rgb(0.6,0.4,0);
  38.  
  39. // Lignes verticales
  40. xaxis(axis = BottomTop,
  41. xmin=xmin, xmax=xmax,
  42. p = pBord,
  43. LeftTicks(scale(.8)*Label(red,Fill(white)),
  44. pTick = 0.05mm + black,
  45. ptick = pGrille,
  46. extend = true)
  47. );
  48.  
  49. // Lignes horizontales
  50. yaxis(axis = LeftRight,
  51. ymin=ymin, ymax=ymax,
  52. p = pBord,
  53. RightTicks(scale(.8)*Label(red,Fill(white)),
  54. pTick = 0.05mm + black,
  55. ptick = pGrille,
  56. extend = true)
  57. );

Re: echelle+graduation

Posté : sam. 18 avr. 2020, 13:21
par zariski
Merci beaucoup, c'est en partie ce que je souhaitais …
Cependant, faisant de multiples essais et surtout tant que je n'ai pas compris toutes les routines, comment faire pour obtenir le repère ci-joint avec chaque étiquette près de son axe et les lignes verticales de 0.1 en 0.1 ?

Figure asymptote d49bb44142130001cee4fab0a34fc694
*** Pour masquer/découvrir le code Asymptote qui a permis de créer la figure, il faut cliquer dessus. ;-) ***

CODE ASYMPTOTE de la figure ci-dessus : Tout sélectionner
  1.  
  2. import graph_pi;//Charge graph, markers et base_pi + usepackage("mathrsfs");
  3. import patterns;
  4. import math;
  5. import geometry;
  6.  
  7. usepackage("fourier");
  8. usepackage("amsmath");
  9. usepackage("siunitx", "locale=DE");
  10.  
  11. unitsize(1cm,1cm);
  12.  
  13. real xmin = 0.1,
  14. xmax = 1e4,
  15. xStep = 1,
  16. xstep = 0.1,
  17. x0 = 1, //abscisse de l'origine du repère
  18. ymin = 0,
  19. ymax = 4,
  20. yStep = 1,
  21. ystep = 0.1,
  22. y0 = 1; //ordonnée de l'origine du repère
  23.  
  24. //<-------- Base-2 logarithmic scale on y-axis: -------------------------->
  25. real log2(real x) {static real log2=log(2); return log(x)/log2;}
  26. real pow2(real x) {return 2^x;}
  27.  
  28. scaleT yscale=scaleT(log2,pow2,logarithmic=true);
  29. //<------------------------------------------------------------------------->
  30.  
  31. scale(Log,Linear);
  32.  
  33.  
  34.  
  35. //<------ La grille ----------------------------->
  36. xlimits(xmin,xmax);
  37. ylimits(ymin,ymax);
  38.  
  39. pen pBord = nullpen,
  40. pGrille = 0.05mm + rgb(0.6,0.4,0);
  41.  
  42. // Lignes verticales
  43. xaxis(axis = BottomTop,
  44. xmin=xmin, xmax=xmax,
  45. p = pBord,
  46. LeftTicks(format = scale(.3)*Label(blue,Fill(paleblue)),
  47. pTick = 0.05mm + black,
  48. ptick = pGrille,
  49. extend = true)
  50. );
  51.  
  52. // Lignes horizontales
  53. yaxis(axis = LeftRight,
  54. ymin=ymin, ymax=ymax,
  55. p = pBord,
  56. RightTicks(format = scale(.3)*Label(red,Fill(palered)),
  57. pTick = 0.05mm + black,
  58. ptick = pGrille,
  59. extend = true)
  60. );
  61. //<------------------------------------------------------------------------>
  62.  
  63.  
  64.  
  65. //<---------- Les axes --------------------------------------------------->
  66. // axe horizontal d'équation y=y0
  67. yequals(y = y0,
  68. xmin = xmin,
  69. xmax = xmax ,
  70. p = 0.2pt + blue,
  71. arrow = Arrow(HookHead,size=1mm), //Pointe de flêche
  72. Ticks("%",
  73. Step = xStep,
  74. step = xstep,
  75. Size = 0.5bp, //Taille des traits de graduation principale
  76. size = 0.4bp, //Taille des traits de graduation secondaire
  77. pTick = 0.3bp + deepgreen, //couleur+taille des graduations principales
  78. ptick = 0.3bp + magenta //couleur+taille des graduations secondaires
  79. )
  80. );
  81. //label("$x$",(xmax+xStep/2,ymin+y0),S,stylo);
  82.  
  83.  
  84. // axe vertical d'équation x=x0
  85. xequals(x = x0,
  86. ymin = ymin,
  87. ymax = ymax ,
  88. p = 0.2pt + red,
  89. arrow = Arrow(HookHead,size=1mm), //Pointe de flêche
  90. Ticks("%",
  91. Step = yStep,
  92. step = ystep,
  93. Size = 0.5bp, //Taille des traits de graduation principale
  94. size = 0.4bp, //Taille des traits de graduation secondaire
  95. pTick = 0.3bp + deepgreen, //couleur+taille des graduations principales
  96. ptick = 0.3bp + magenta //couleur+taille des graduations secondaires
  97. )
  98. );
  99. //label("$y$",(xmin+x0,ymax+yStep/2),W,stylo);
  100. //<------------------------------------------------------------------------>
  101.  
  102.  

Re: echelle+graduation

Posté : sam. 18 avr. 2020, 13:40
par GM
Je ne comprends pas !
Plus de puissance de 2 sur l'axe des ordonnées ???
On est repassé à scale(Log,Linear) ??!?
Alors que font encore log2, pow2 et yscale dans le code ?

Re: echelle+graduation

Posté : sam. 18 avr. 2020, 14:02
par zariski
oui pardon… n'oubliez pas , je fais des essais et j'ai laissé trainer la base 2 qui finalement n'interfère pas dans mon nouveau code.

Re: echelle+graduation

Posté : sam. 18 avr. 2020, 17:48
par GM

Figure asymptote 83de02f548eae17672e4ea4b16c206a9
*** Pour masquer/découvrir le code Asymptote qui a permis de créer la figure, il faut cliquer dessus. ;-) ***

CODE ASYMPTOTE de la figure ci-dessus : Tout sélectionner
  1. import graph_pi;
  2. import patterns;
  3. import math;
  4. import geometry;
  5.  
  6. usepackage("fourier");
  7. usepackage("amsmath");
  8. usepackage("siunitx", "locale=DE");
  9.  
  10. size(400);
  11.  
  12. real xmin = 0.1,
  13. xmax = 1e4,
  14. xStep = 1,
  15. xstep = 0.1,
  16. x0 = 1, //abscisse de l'origine du repère
  17. ymin = -1,
  18. ymax = 4,
  19. yStep = 1,
  20. ystep = 0.1,
  21. y0 = 0; //ordonnée de l'origine du repère
  22.  
  23. scale(Log,Linear);
  24.  
  25. //<------ La grille ----------------------------->
  26.  
  27. xlimits(xmin,xmax);
  28. ylimits(ymin,ymax);
  29.  
  30. pen pBord = nullpen,
  31. pGrille = 0.05mm + rgb(0.6,0.4,0);
  32.  
  33. // Lignes verticales
  34. xaxis(axis = BottomTop, //xmin = xmin, xmax = xmax ,
  35. p = pBord,
  36. Ticks('%',step=xstep,
  37. pTick = 0.05mm + black,
  38. ptick = pGrille,
  39. extend = true)
  40. );
  41.  
  42. // Lignes horizontales
  43. yaxis(axis = LeftRight, //ymin = ymin, ymax = ymax ,
  44. p = pBord,
  45. Ticks('%',step=ystep,
  46. pTick = 0.05mm + black,
  47. ptick = 0.1mm+dotted,
  48. extend = true)
  49. );
  50.  
  51. // Graduations sur l'axe des ordonnées
  52. yaxis(Label(scale(.8)*"$y$",blue,Fill(white),align=N),
  53. ymin = ymin,
  54. ymax = ymax ,
  55. p = 0.2pt + blue,
  56. arrow = Arrow(HookHead,size=1mm), //Pointe de flêche
  57. Ticks(format = scale(.8)*Label(blue,Fill(paleblue)),
  58. NoZero,
  59. Step = yStep,
  60. step = ystep,
  61. Size = 0.5bp, //Taille des traits de graduation principale
  62. size = 0.4bp, //Taille des traits de graduation secondaire
  63. pTick = 0.3bp + deepgreen, //couleur+taille des graduations principales
  64. ptick = 0.3bp + magenta //couleur+taille des graduations secondaires
  65. ),
  66. above=true
  67. );
  68.  
  69. // Graduations sur l'axe des abscisses
  70. xaxis(Label(scale(.8)*"$x$",red,Fill(white),align=E),
  71. xmin = xmin,
  72. xmax = xmax ,
  73. p = 0.2pt + red,
  74. arrow = Arrow(HookHead,size=1mm), //Pointe de flêche
  75. Ticks(format = scale(.8)*Label(red,Fill(palered)),
  76. step = xstep,
  77. Size = 0.5bp, //Taille des traits de graduation principale
  78. size = 0.4bp, //Taille des traits de graduation secondaire
  79. pTick = 0.3bp + deepgreen, //couleur+taille des graduations principales
  80. ptick = 0.3bp + magenta //couleur+taille des graduations secondaires
  81. ),
  82. above=true
  83. );
  84.  

Re: echelle+graduation

Posté : sam. 18 avr. 2020, 19:40
par zariski
Je ne dirais qu'une seule chose : IMPECCABLE !
Je n'avais pas envisagé une seule seconde l'utilisation de "xaxis" ou "yaxis" de deux façons différentes.
Le top… comme d'habitude.

Je vous remercie vivement !

Bonne soirée !

EC