Построение нескольких списков в пари

У меня есть два (пары) списков, которые я хочу построить. Я знаю, что я могу построить каждый отдельно, используя функцию plothraw. Но как я могу нарисовать их на одном и том же изображении, чтобы я получил две кривые разных цветов?

1 ответ

Решение

Для справки ниже приведен способ построения двух наборов данных на двух отдельных графиках с использованием plothraw:

\\ As two separate plots using plothraw
plothraw([0..200], apply(i->sin(i*3*Pi/200), [0..200]), 0);
plothraw([0..200], apply(i->cos(i*3*Pi/200), [0..200]), 0);

Первое решение с использованием ploth:

 {ploth(i=0, 200, [i, sin(i*3*Pi/200), i, cos(i*3*Pi/200)], "Parametric|no_Lines", 200);}

Второе решение с использованием низкоуровневых функций, но я не смог заставить работать цвет (очевидно, поддерживается в X-windows, но не в Windows):

{my(s=plothsizes());plotinit(0,s[1]-1,s[2]-1);}
plotscale(0, 0, 200, -1, 1);
plotcolor(0, 2); \\ blue
plotrecthraw(0, [ [0..200], apply(i->sin(i*3*Pi/200), [0..200]) ], 0);
plotcolor(0, 4); \\ red
plotpoints(0, [0..200], apply(i->cos(i*3*Pi/200), [0..200]));
plotdraw([0,0,0]); \\ draws window 0 at (0,0)
plotkill(0); \\ frees memory of window 0

Вероятно, с первым решением легче всего работать (особенно если вы не хотите, чтобы все были одного цвета). В случае, если у вас есть данные в 4 векторах, скажем vx, vy, ux, uy все из которых имеют одинаковую длину #vx == #vy == #ux == #uy тогда правильная форма:

\\ first 2 lines just create test vectors
vx=[0..200]; vy=apply(i->sin(i*3*Pi/200), [0..200]);
ux=[0..200]; uy=apply(i->cos(i*3*Pi/200), [0..200]);
\\ the actual plot - the \1's just round to integer index
{ploth(i=1, #vx, [vx[i\1], vy[i\1], ux[i\1], uy[i\1]], "Parametric|no_Lines", #vx);}
Другие вопросы по тегам