From 20d0194074ffc4d5618241fbf622d684ed69ee9b Mon Sep 17 00:00:00 2001 From: alembcke <79891353+alembcke@users.noreply.github.com> Date: Thu, 25 Jul 2024 14:46:15 -0400 Subject: [PATCH] Added `colorscale` to `axes.plot()` (#3148) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * add colorscale to plot * Update manim/mobject/graphing/coordinate_systems.py Co-authored-by: Benjamin Hackl * updated typing and moved one line * added test * fix input_to_graph_point error * Performance improvement by using cairo color drawing * Add OpenGL support * Add OpenGL tests and split test for x and y axis for more behavior coverage * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Updated gradient_line tests * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: Benjamin Hackl Co-authored-by: MrDiver Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Francisco ManrĂ­quez Novoa <49853152+chopan050@users.noreply.github.com> Co-authored-by: chopan --- manim/mobject/graphing/coordinate_systems.py | 59 ++++++++++++++++++ ...aph_x_axis_using_opengl_renderer[None].npz | Bin 0 -> 13887 bytes ...aph_y_axis_using_opengl_renderer[None].npz | Bin 0 -> 13292 bytes tests/opengl/test_coordinate_system_opengl.py | 34 ++++++++++ .../gradient_line_graph_x_axis.npz | Bin 0 -> 13887 bytes .../gradient_line_graph_y_axis.npz | Bin 0 -> 13292 bytes .../test_coordinate_systems.py | 30 +++++++++ 7 files changed, 123 insertions(+) create mode 100644 tests/opengl/control_data/coordinate_system_opengl/gradient_line_graph_x_axis_using_opengl_renderer[None].npz create mode 100644 tests/opengl/control_data/coordinate_system_opengl/gradient_line_graph_y_axis_using_opengl_renderer[None].npz create mode 100644 tests/test_graphical_units/control_data/coordinate_system/gradient_line_graph_x_axis.npz create mode 100644 tests/test_graphical_units/control_data/coordinate_system/gradient_line_graph_y_axis.npz diff --git a/manim/mobject/graphing/coordinate_systems.py b/manim/mobject/graphing/coordinate_systems.py index 435d7aced8..5730862118 100644 --- a/manim/mobject/graphing/coordinate_systems.py +++ b/manim/mobject/graphing/coordinate_systems.py @@ -48,6 +48,7 @@ ManimColor, ParsableManimColor, color_gradient, + interpolate_color, invert_color, ) from manim.utils.config_ops import merge_dicts_recursively, update_dict_recursively @@ -628,6 +629,8 @@ def plot( function: Callable[[float], float], x_range: Sequence[float] | None = None, use_vectorized: bool = False, + colorscale: Union[Iterable[Color], Iterable[Color, float]] | None = None, + colorscale_axis: int = 1, **kwargs: Any, ) -> ParametricFunction: """Generates a curve based on a function. @@ -641,6 +644,12 @@ def plot( use_vectorized Whether to pass in the generated t value array to the function. Only use this if your function supports it. Output should be a numpy array of shape ``[y_0, y_1, ...]`` + colorscale + Colors of the function. Optional parameter used when coloring a function by values. Passing a list of colors + and a colorscale_axis will color the function by y-value. Passing a list of tuples in the form ``(color, pivot)`` + allows user-defined pivots where the color transitions. + colorscale_axis + Defines the axis on which the colorscale is applied (0 = x, 1 = y), default is y-axis (1). kwargs Additional parameters to be passed to :class:`~.ParametricFunction`. @@ -719,7 +728,57 @@ def log_func(x): use_vectorized=use_vectorized, **kwargs, ) + graph.underlying_function = function + + if colorscale: + if type(colorscale[0]) in (list, tuple): + new_colors, pivots = [ + [i for i, j in colorscale], + [j for i, j in colorscale], + ] + else: + new_colors = colorscale + + ranges = [self.x_range, self.y_range] + pivot_min = ranges[colorscale_axis][0] + pivot_max = ranges[colorscale_axis][1] + pivot_frequency = (pivot_max - pivot_min) / (len(new_colors) - 1) + pivots = np.arange( + start=pivot_min, + stop=pivot_max + pivot_frequency, + step=pivot_frequency, + ) + + resolution = 0.01 if len(x_range) == 2 else x_range[2] + sample_points = np.arange(x_range[0], x_range[1] + resolution, resolution) + color_list = [] + for samp_x in sample_points: + axis_value = (samp_x, function(samp_x))[colorscale_axis] + if axis_value <= pivots[0]: + color_list.append(new_colors[0]) + elif axis_value >= pivots[-1]: + color_list.append(new_colors[-1]) + else: + for i, pivot in enumerate(pivots): + if pivot > axis_value: + color_index = (axis_value - pivots[i - 1]) / ( + pivots[i] - pivots[i - 1] + ) + color_index = min(color_index, 1) + mob_color = interpolate_color( + new_colors[i - 1], + new_colors[i], + color_index, + ) + color_list.append(mob_color) + break + if config.renderer == RendererType.OPENGL: + graph.set_color(color_list) + else: + graph.set_stroke(color_list) + graph.set_sheen_direction(RIGHT) + return graph def plot_implicit_curve( diff --git a/tests/opengl/control_data/coordinate_system_opengl/gradient_line_graph_x_axis_using_opengl_renderer[None].npz b/tests/opengl/control_data/coordinate_system_opengl/gradient_line_graph_x_axis_using_opengl_renderer[None].npz new file mode 100644 index 0000000000000000000000000000000000000000..6efda8b2e032e2345f95cde379bb75301ffd45b1 GIT binary patch literal 13887 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 YuaCdXjJb}pTRFgAZSb24=0VW^01{wLD*ylh literal 0 HcmV?d00001 diff --git a/tests/opengl/control_data/coordinate_system_opengl/gradient_line_graph_y_axis_using_opengl_renderer[None].npz b/tests/opengl/control_data/coordinate_system_opengl/gradient_line_graph_y_axis_using_opengl_renderer[None].npz new file mode 100644 index 0000000000000000000000000000000000000000..3c7afcda7d70d3c0a8db210b661a593acde6da8e GIT binary patch literal 13292 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 literal 0 HcmV?d00001 diff --git a/tests/opengl/test_coordinate_system_opengl.py b/tests/opengl/test_coordinate_system_opengl.py index b63a431234..c9f5cc81b6 100644 --- a/tests/opengl/test_coordinate_system_opengl.py +++ b/tests/opengl/test_coordinate_system_opengl.py @@ -20,6 +20,10 @@ tempconfig, ) from manim import CoordinateSystem as CS +from manim.utils.color import BLUE, GREEN, ORANGE, RED, YELLOW +from manim.utils.testing.frames_comparison import frames_comparison + +__module_test__ = "coordinate_system_opengl" def test_initial_config(using_opengl_renderer): @@ -138,3 +142,33 @@ def test_input_to_graph_point(using_opengl_renderer): # test the line_graph implementation position = np.around(ax.input_to_graph_point(x=PI, graph=line_graph), decimals=4) np.testing.assert_array_equal(position, (2.6928, 1.2876, 0)) + + +@frames_comparison +def test_gradient_line_graph_x_axis(scene, using_opengl_renderer): + """Test that using `colorscale` generates a line whose gradient matches the y-axis""" + axes = Axes(x_range=[-3, 3], y_range=[-3, 3]) + + curve = axes.plot( + lambda x: 0.1 * x**3, + x_range=(-3, 3, 0.001), + colorscale=[BLUE, GREEN, YELLOW, ORANGE, RED], + colorscale_axis=0, + ) + + scene.add(axes, curve) + + +@frames_comparison +def test_gradient_line_graph_y_axis(scene, using_opengl_renderer): + """Test that using `colorscale` generates a line whose gradient matches the y-axis""" + axes = Axes(x_range=[-3, 3], y_range=[-3, 3]) + + curve = axes.plot( + lambda x: 0.1 * x**3, + x_range=(-3, 3, 0.001), + colorscale=[BLUE, GREEN, YELLOW, ORANGE, RED], + colorscale_axis=1, + ) + + scene.add(axes, curve) diff --git a/tests/test_graphical_units/control_data/coordinate_system/gradient_line_graph_x_axis.npz b/tests/test_graphical_units/control_data/coordinate_system/gradient_line_graph_x_axis.npz new file mode 100644 index 0000000000000000000000000000000000000000..6efda8b2e032e2345f95cde379bb75301ffd45b1 GIT binary patch literal 13887 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 YuaCdXjJb}pTRFgAZSb24=0VW^01{wLD*ylh literal 0 HcmV?d00001 diff --git a/tests/test_graphical_units/control_data/coordinate_system/gradient_line_graph_y_axis.npz b/tests/test_graphical_units/control_data/coordinate_system/gradient_line_graph_y_axis.npz new file mode 100644 index 0000000000000000000000000000000000000000..3c7afcda7d70d3c0a8db210b661a593acde6da8e GIT binary patch literal 13292 zcmdUWXIN9)*6vb2Hs7`$4+07TTiqfC0g);t;C3S-1Vjj-1r($=1B4!6>rteu2nZ;k zG)W*abVAcD0R`#3YeEerhL%7mcP`Gk_dfUjzJG3f1kD_4&N0S($Czcj>$c&6|B{0s z=)b|=Gtm1_FB*6M^EnEgfSi5rc{$nNzvq8X-uprDKIk7%q`)a42|?CMd%vK?F~OI% z__5|6Z%VZ5xZ?-@x_#h9XXtF*z;Azb8vgb)@?U3vlXxyIvG3Zypj#K-8VLUN+f4<; z+nc6;7>2XIVVCdZ=6bF#wIi?2T)k_-sTm)u%35jgn~7Ufv+?;{e8ovHRYEmr04KOm zvip6Ce|Tr;+BrdmZkM0l{Dp|`JDQ7ipOJjF2ARkASWx~EiF-VubC>&OT>`@!xPC*v z+ojMn7D)GY8w&4u&z>b5Wh*5%xVN;l?Ekm&{~!Mpiv?!>#4x@M+f z*uH|S@XcN9)VG5Wba#osFKS5>hMmh zeXWD|+G<~}qvc2nbuD|TkPSsnlk3}w(_28Y^RoMLb&zkXuw%dEJpHPye9ERI2IBVHqCk%L}sxunb?_dHkAOcR0- zbUAQ(^$wVT^wLQcv`zd)u$>1dj0t={ew5q0L=z>=AI(92WNb&e`Rs?L-+&hV`Is=R zhV2+d4+@^KJ=Xv9lb46t#D78Gq_6^=Kd%T3#ADxentNQpmd{0!3*o1-$opM`gi=|e zrR#Q@b40VI!-l}Z4|l=fpRMy;_&iUFN)kD}V(z_6hw~lK)uof5s|O(!MKKYJ6}R3N z_Qyml&~EvYieXbee21TV|ILZ{m)s3{5urcE~iaFw25bFSZ_)w z+a8ipp&h*YW6s*<6eUqSNx4sxiAmTg_JEb^)xipUcyJ=i498AsZ7kZhNbKNRY4@{w z&a9!JkAJ@xHSXQ$L@&)2KLnJ0suK;Z75L1vf;tRQ$s5{(Vr9pPkGc`_<9m_DDKB&>T>Eg^Y4S=CezTy3MmBKinzm zZY|w~vaj}lmVB*@=#dJ`OU_cYce>Hc8~%ns>1Xm-fy+Ma_Ms23X2P#O+}Z8rLeLx# z_w(uYt#ep!6i&*g1?1?x;1=Hs1>#5`9$0aDSkYNHgZTZ^VoF^4vMsDx(>2V#t*S0< zo91r^FgMd#d1I;Z?d8HS0>zGD1%7^hQbvgmT*uaTnmaP;2oeAMtPzx{0sTbL4u0q3 z3yYtoHYrGy9y=wJby{7+g4HJtysgX3Awl&vvB2B4JzxGXi%+n6OdbxgEP$x~bCRSMR3%VJ0UfC8>-^nd?6bo8OZ| zikv3ej}U_#v(7uNccdhyMa9MRZB`h-a8sT`WM5_Vmz=eGb-AR|yp=u^B`2D3*eweV z#JO&?u3t~RhLp)-z2!G#SoJIPEb)yf`z74y)&m;5iC09AEz(@y7T!3IE#ED{?ioU$ z9dwm(vrg^iGrpdFOK z3s)N%4TbznMU{KLuJfMwqWlmG=>kaVUTk$y!nI8wa9lr*N8!7kY@f?8h!BNt1JiF4 zeIMu3e0%mi&bOAHBQhptuB7z_?t}6`$mG2rG*9&!RbYH^dO_a&Eb{1`7O4=5e0&`= z533Fk>J3vL{t6+}J=zF!8qxsD<*IyZP1{-s8>>%-s>t-7~=6Lf&q^ zhI?Ud;ZE&h_T&a@PaLGiTh};i=Bb{`PG-WcAoR}wrxwbp_DyAoq_afrRr>toOs2le_V$XcR$NHiGu13IGPjv#ag%xZpq#aZ#d1+5R{!h__|TKmbm83pLsS%8!CUPNEq zg!iMf(gP}edg5H;Oq=KH@=$g#u)(a0sw$PZcr~}v{9F=wb1g(WiCc6lR1}H?V?C5C zZe7IK_ifr<}9n}&vm3{Ac^QBDXz77l43xI)03h2*KwZsNr ztK#-Nx6m17r?oEDrwCvNP2_{8-0AgljO{F-#Eiaz$Vj{=oZlna??97l&W~cp>8^8U z6R?+%NZ&t;)N;`vK%jb%PQ@~^H%F(nIf?fyJ62yjuoiFz3Tjl*%$xyIVmuK zH}&)>Q@=4I>S*k7ED=uXKOI3BoSZC8Q}^jvI)33&x__Ua;L!x6m+YMh0qC-tzwon) z;TX@+G7t7sAyI(5zqAGaj2aGO)qrhG3VDBbZ=MrUa-0&;ND(ohv7ShT>Z5{H*RT+@ z@&{(0+o}G%D|X1R+l^mif5)z6plJH?83tg#^RX60iI~MHbMalI_szzOv5gCVm`Tux zT)qI54icks*_#{X(IzI6A~@Dh-eltsYTrML;V}8|8_@T5Nm_}z_qOqImlNr%vLBpw z#p@3KI&72xqzp&Vf2#-&RXN)xK2?f3k6jzRcfj$keut^xUL1*3NP4YsX5SLdwTl5; zv7y|A0F`PO`Msi8flEfM>%|EXr*(c~3|t3UEh59)^!ds+9VokO7IF99khl5#tKg>Z zPfMd3MO}`@Z)3dn=H@ZTz-w};akj^>(3p71#4^L$etL=MPbYlT=Z zdGDc0{l@A?N#u|n(QOA;(T)NLx&<;LtM#d5GKYZ!T8Y2*@5@?WI_0IEwI6c*1w^V; zg>8k?*37_xv+YtRN)MsdT2UI(+ynV_hd|H(wXRM2rKvm3Cme5(IEnj|&Fio_;1HW< zlV11CvQ!qeNGO^OVD{`DpO%zSxthXP9q_cfBo`1>#1V94T&36oH9NEalM%ay~GU+5@7 ze0)_=r+Mnpr$^)OHe?#{DVTRp*6-5fc9wd4Kp# zRWp$&??Gu~Ly=FT@U~;X+d|_(B4PRT$FjhRFKH#=^JYMnK@2y*ptgf6XS>=75g?j?+wC#v%xJSfchOSHlDO$l zI(XbPqZ~gW1${i$iT-#xc9rR*eC&rr3H_6K6krVUkL@jwC0biOI_3;T+WO5<0wg|IO z<{JwmOW6V#L0hyS$4A(Ymx8>rq*LLs%4Q6m08w)5`n8pwYLq-VqgRo!X?HwgK_Uy= zBYSkD3_n>i=W_sZjqw*&RsiR)+N=8?D_CX>q$q&0L+gemO?a50sBBoE@l zg7&4;t%sL25CGlRFxT8pby2i-d_$U_+R*g3szbvx@ip@v7|_*-l~Mfiq9t@Tj#>Ckcl| zr?C}5sMB&5;rbfUqJ;b2ufk#L1jbZVcA9hj6OQflUOhTmqPk%@%m)Xy81loW^GO$D zc8tM-8*V*f z>8Xo^?F|Fl@i}qR+58M+HwjK^0v?6_xjMDz@Ma2e2YB>jVh{RR=8m>6Zb-qJUgTh+ zJ*YTGR4ed*iW4{2N2cx|K>|-8KYTKfW2PFeRHzrWt{e3}&eQAJNyk<4TOuY;5NGKNVUh#;+G^?}>GzKl~I9WxYJ$!DI>! z>uFgJm}en7&xC7J_5A1GgFKh6ffYDplGr|^PH;ed3;WP%mRN2QwsV`WzWY<8tH4Hn zjQ~NtV8gmbu}}1T?HA+~wtV|-L8eSlZKv6>%EUv7p3k*NXBS~91t8_p^;dP(Le(&D zi}Qz}wiP_wsC>K5JH6F;GMrYE$qxl88Fx0S<_6>(*6l}b{60+o7B$?I7S;bJn{1~e zum`$tSq#3RSG`5BmOr}nX~9T;FwraQK|}^`DqN*2?@=bm!SepX-!d%Zu26Rqk~zy> z#b-0!%nCZqcWZ0#r%MdcWo~oZuzBKG0Y8_!Y|qyLmiREKOLFpv_La( zGPlTWI1WYn&mwr?L!MSe+R{>LZ*0U%v%DlYl@A&Ahp>3Qk4+;@Hbq}LX~!7k-#pUy zh;pB#=mUYpPer|bj&p41H6G`uZ`_|(kMPCEom?0S2QbjXe8N~*B1BVnh#JnwF$9Ax z&{26Soz+)k-E^h~eIu&EPE!E-xZ90Z4y0QQ`^?0=3ODp>JXFjAXLFEkz3Vk(o(Hp^u|oXypr^ ze{p7}MwvHeL=?scRd<>y^rdb8(OShUNgwp}te)B22VL&)7tSLaHXAL}7zS(kI-(k7 z7)V)Rlxm_Ul9^Y!TP-TVmt}a5<2UV*w`b6*tQEQwD>qg-M zG(FvM`Kw=V&-g*GKQAE32+O&*I*^X|;l?)5iYt%*Fs!rtY5m4Zq4H@Bg_!V0O~E8x zcCi?OUW#D#%=(F)H*I`gCVF&`;u7uOM+fE1w&o*(7#)3zxUk^Wh5S4SvJCPUMxhFh zrVZjV!bbhwoWhoGz0Dcl>K4cEsFrIaXk?!azM(g4vk!8W1d^XR|4LI2>IfSRz3%ia zq*Q~EC9wOx(9D(SQeZ*v5=?G(_*@1u{1FpO*GV)wg)S!R#4P(d#rgXY`uHx9ywX9@ z3Nb{VuD1_9EL8-CznMyYM?Kl8CKS5#BKBe`x-r5YASmu(C2<~Xb4mwD%yp8iBOANY zRZuWsxDQO#ETX%+9xJVi)e&#lKqKwKa<4EJi5g1v%j>0R+?$DdpdU zMtsuZ{fyh1dyc(qUf?3m?qF|k&4(uA4{EQiuLyJahgu!CjH^%f+Uo<|R_74Y`WgLB z)Fwn4Z|K_4D_=BnJiM^em>tp9&~PQE({#YjRx)%~S@hf!m$OL*5jwq<&(G=KaB^~D zY3_woxY4|Y6SaHRXrTe4O6GaVXGUmAmFmbO@;-cjbhX}{*q~z}DY~s8#RQqG^ICh3 zt7J?>Li;PlbL*piCIkVf?HQRdAF?hJiyvrd%zadXTg$8F@sl1uL9F-a+i(8NKyK;> zkK)ac2|5T-@uH;o_BZ|~+RQi|T?~qe&bGPzK3%0;QhEVH>Ac11H_;qs39kR*(5nzb z`SDOCDNdHp#w;m+b9HPvD99bzjyx}_>603-7v-WwIaaS+K$_k{toMbo>qLbv7{{?# ztX?j-BS|GAup41khiC0YJSb_=+uZg>pY|_JW0m)rivxbgrDo>0xHk0*g^A-W&4j>7 zMp2RZM-t0>H7Cy$Q$zg?(b~ucxil$5Z1Sy z+ln-E5SeH!&Okar&VR59dxgqsNz3hup%nNMGDHU|Ij;u54180V-~w;S!DD)~4^-mk zX_73A>kGPwY^)PFHuPD@W=bW~*GH1+ys=gX#wRD-C^b!eCC?9Z;O*CXU8G!?YpJE2)X-8+vxgFH^J1F%hpE_r&7-`+)U*HN;!U)joru@S4kc52KD>VS%mKj^`U}H;iU;M* z%lGVvr54!%m6l^xp^GJho~66x%mgRuh_`*(<+mVBHTbS}IpMZ&0?nzyAq78GHZwFZ zSSt~XJzB)fTPAkITQ1hktd;RRs+CdLkV21DcuCLjc}Wjtr_c+sUg~|@srZI*ZY%In z>5V{sX(TB)0nr#P(}}@2q=f7KHBJ4&F3sDQjptYG{)J+8{oPSzA{yRLsQ;nAmFm7{q^*$=MN)nU^86j2xPM|idnlFeRIE-=1KDxn;%fVdQb==L@)7Q7y+=+Ac^@D1v|xI;Qg?y0GU8Zr&^H zj}9jWk)(v1LZ|WCt~y04brjWHD4wli)(3Z3b0jM$6FnBS&5Jcl1le&Rt|PZim|g6F z;O-M)TWwMKVnDC(0qy7X(DOYzGzH zMSG5FtB4QSXGI&ze{DSFa-T8i7`r>>MCJ2J2EF+ugF#8O8yAr|*}S5Mj1Df{Mf610 zy=UvY{iwOkZe`$1kZ-j_%1Emx{96B=CP%o~35L=e{#r+43+cY&47L=vI%#X`YbC#w zo|1^MYi<74(ZcLeXknKAxg%Rzzr0bjyGZ2fe50>KbkMcA&P(Rf4PBC8g z_~AaIHeT)625-4I>xC`TF)>Hhu+#ovS({;gZJ1_E+xX%>J+9`_Cp{Ogo)H)Kc^y3! z@#3Pg^;l?L{`OThwfczvWThrYyP8`jiVa~C@KQ5JD!LSVJl4r^Ma~!3Xu46wAT9^3 zevJv*ZAeyJS)q__hFxh+MWMIq7^l#jA{N8&P@BKMe1Jr1e0hI+B@j_2&@ zz2vdy#_0;+MqM`<WX_LoL>}7(&EcGW{3PAc*o?r# zIcaSe1#kV>413KZ*~U$r!_4M;9+rGzK)bZq5x>Elxe_VBb;RZsK2%&c=gXWaooGaedIa=*JJaT(%ZW#QtH}X1cXK9JDpZ;w_#}R=k(Bd{SFlwAk81rXJk% zT0Wrb=&zm7W!?#^X#Ac;+y+KG$$dAUNt9dYqI_C6iQ5KB| z($qV=_z`+-7aBU`J^AH%$ieL6vpSc>HRDNf6Lxmu9S!4%@$D)+qb||rJStgcYx_WA zf73-53wp}P%jU?xBcvC{;Ojt8iY4;Gp2n+^p7ykpqnmg85#t*^85&ZR8@u`G9MkzK zX6CT^CXZ+t>WLgK_Y=|E21OW1S(rYvCRc5QJc=yR*a-_H@dot09GfCWnnt3*p^jsk zQMIy@g6pNCsZG`!u0yx*F!yY`R)d}v-@PViUI*`dV!M(|k_@Kd zU;BrkiW*F-S7h#hf*IuM8M59&muHfgtc%6Wa;`>W1JYe;chiLbhe^3fIxG2<7qeud zGVV=;^(g{BlyCwr5JAenJc^ojoQPJzwQ74YrKIqeX8*Cfb%#pYSvJpj73SboROTLR zZgDl~9S(R8%5@q%yP-boBF9+LA8yW&3P8xLnw!2Qjq|dvk3O)OAM~4Gom5v(-L&AH zf&KMF`N2)(dY1XX9ZE!Jb*G7dff+s~bz24=!_KPkqzai?O(oHpV+Cqpi`3lvQtNaRUMaS3&!LIu|s zFTu#;(wa!@fr|ls6BDe{Gxp=ss)J<+caQQDD1aI$yZ(NulcIAnQGIbMfU}@eLvP(( z5}}+B4q@d5)->fsxQb?YVHdUYWUj($3-pzmAlG$@(4$;`a6*}vRM@TweOpMofK{0y zCs0>-!?S}!^La8@Sa`$KG%cDcKG2vKv2ZdXqSB?7XP5XVl_VKdVR+j2{ygwU)~2!R zf5WoDT?O_?X~{lS$&h;ew*?{eLyz-Ae$-`hDkJcTO7fmkvc-17)wY|OZ^3md1ce(> zlPqisq{Bl|GeJvW>v z(IhacAI?n7NtkTsU|#zN@GafVomk>;6+v|o3LE);PZ+maD8YQo(&HA9L7@3s>A;3^y=CWp$~wZ(wImmRjSN zPp_2){^6JlgwrcyVvIaXQ1ewk#_c$(aXTENYrqTP)h0$76@=9#Oy=ed*9D-g?n-Y7 zUNvBdgdN>5ZwO))|HWCgIq-r^Tk9I9GI{-7@A5*o?|K6VL{8^jF9=%*4Qj61WglQr zcEwIa$SI?#Byw$@OHuW;*e_E`g+BkvzkvZ)qsOqJFPqOa2P6pEpE_Z(&%Ov_KCd{Gz0BL7(3&1mjwCeiUj03jH}gGcHU1iI!3yi}{dR{z z)MhrY=$2XHxG=8q;uz!Yz>`MD-IHR8!s)C}7{TTr7XswNzLm;kBVjGOyUShlwia@| zA3qTjN!)U@)UtLZHq>hUel&CRszzX2LH)5?fDi!59FfpSZEkd|p%W;F6Qd?hOD3Ke z<#up(K@=}R5{z*H(vl>*n@4JS`v|JNDIwMQ+l$pKNmHax|{jIq|x&vuULofJ; zqZ|7`y#Z{ad}~p!hJ2l0R~3IM4{#C8M>qcdCv~E$?j2sU!zilh7A$lW8;Wk~nmHPy zX>TXJgn+?eT<>{%Rl@eort0@7*a!Y-b7x0>U1(!lhrC2!Z5d#ZV2s3%JNCP0Y^vT} zf|Xjmq>_)a4V(E=wM{q0fl%KucO^-z&q*euhk7gb`I*2&)dsvlICQ%`V)Toq#*Q3} z!K!R*efnAlXdMS&RtMy&o(3-CYVfI5>l{;D>!H>QSo~1gd54X@(G@{(xeg>w)(Q4E zQpjS*BR2Uaj1GmZ-@P|Sd=;0TjhmvGnL4iE?i%nP&|wNhuXUD$npWu_ZwoDM(pbG7 z`hQNGQ7QB}z=Ct7WzaA2uBTkas_u`jZoR77*y!R!T}X*tt7NB-9s?K5FjoVL+{BnB z$4eYzNe!4t38^8~KyfywU0m`FEm&UQB`8xuw;O&@7}sd01rJsIs7`ih@sn+0OWMj? z*fp53Y9b$l`YqI(xE$l@8F6=)_gP7nz7}C~b&h!5L`uX$T z5+*a5D!6Y`t&J)@m_&~PibyK5%%Q0ES}G`d92$82WRo`6Q*fbv9)LptaxJnLe;;bQ z)rsKnT`Wv!tS=Mt$0caydG&`Zd3y>KdZ8uxZ)$^Vw^!3~Yf2uC!imLVj)AihX-1nP zk*lsUP-L}||JMLqzn5$?+Jutq-)Ar&Csp@L#Z7`JOpkzme)g?4@}xC?tlIio&S)v< zm$#G+(7J!~CB_*P8I+HLWd5CBK5r`=WnX1$%Nf8k0w3pV1hR-!-fTi4d%qYc0YX2= zM5M;9hHHaz(-vi38mlr_>+}v4)dGx)2W3`>m(L(X*es}Bk`H&Nt6Kd^#eHSYH~vzy zo@k_+w5ghn>jqI}?>171I9lWC4>&xDhMBes#&u48CzVUQz!Wv1;3+y);n}Rdm{87m zcR>|kB~mFhUc?LB+zTj&12tWjV%XX$0jZyGJ2~Qwj}v|VA*w|Sj~ffl=H~97P6ukF zm!_voQMqod%>s#DCmIN0pVima%N@Slk%0Sl@8($di7_E7(%TvCPBgRU>rTI^%5bl|6rONNX*YX_e4+CFE{s}nuN zT*hmzT`F}>1dc#~nkAGTo1P-9_+wS^asIGYd+_~I_36#>oaT@Hz?13lbSMjAH_Kwq zk+Ev+;X$#vr1h(QM!glwhw(633Ciw0VpDJPI%p;z*MHqc8e9Gq8GC-OtO>IkAQ>lF zAMM|bL+_H*SKbygdPCJ>od)KTHl?#y;fGI5wUko(a!qlYk8GMx2{ez^-dnZGB>>yH z!Lk;4$E=5VMf!Dl$m{h~FTkYWy(oW&Do6*a=NSUi^K!3uSb%cK5k{|I1&ZcA!_?Q; zLxZBEE+A+?x`nefmNPthR>e~@$wB!!;@Y~U)|E_?eaaB9>gB`dByKFTz+1e57Qt6{ z8&;(*4DJA)MmnfnK+1SoAGNc_Re{awb2}0a%f&WLAM0g!i^3r{?9XFf_% zQ0_CvF$kJXxgKiK?F5^G`a`bau)v9A%#$5$x0gSuwk? z&(*@9BM?h055 zBJu5T!|Ww#VOi>1{W#oe?-=vTNI>*G$4y|+_jy>~S8^3i-_@7f$C#pK&CU1J*ry4i?DS3P zNFUgdj^ztY=NMmV)@79YBo#S{nl~!10et?~Pb~cG$>OT*Zd`BguL7Y>I~X6)#ZZ`D z^N|both$abK;fBHL%BU$SeHZ|p6@QsK{ty4WbJKHT`yf3GAgRsMc^iT2`|XQ+goz) zDo}V(wGNL1$P|0zVCEGxn+|}fHb=yE3|}Hz!^O_K-oT*Wynt6!wH-W9E8-h+Ndf9k z%=hmRCIr!sqabp1(|xC^2g8&BfB&s$V6I5Tq!p{#=TsDmZ`F;SHxVNhM!oG!O?{ zrZ2f9)wEix`+nnD2W0?R40<1!W>kd#zKNSH1MH;XtyG%}6e=i{fBXX;Y_p;z(?c|! zH48F{Mlc^H`uObM+Z^4_vKVyhQ@=kv37RzhQe`N_n_!;*hGDr`vMM4A${Vl1OlSpi z-xtADN8RgSXQE3uNnN_5h+|O!&O;{6&ik7>JNr5 z8ertA=Vrn1%E|x--zY|^;`1is<(=jQ=dmi&1&)C7(rF1+zPsK5Q5oM;HQs?R?ZnJ2T^#y`pn2wMwV>AtUxg#(BIaxGbA|)zKOOHKyrtsObbaC z?r;zw;5&cy#(bRZ}N=OC5g_ z4f9}4;l|Txp3+Um<4Wsq0_?ict)7(uK-2X7u;q#&iEWNqZlVB;O^qN$9OwkR1Ss3} z`I^Ng!4)_)LgBJMTGE>$|dEtCh_mJ2mLnVXW4`9_$1x+_XykNO<`*2esfRaxh4 zC+#scb5{IV51~=3pq#BQ?om_ zje^dDlZEb_jYACzK)|aTEo-vn#tPkI_(pd3d-VR3%J206?&B>up2gT@!ovV+XSRPi zYy5lwZKLF5M2D0^)O>qv`nneY$8FdZFZ09DXwPuYDJow(B5rJ{7NK!W3h);r?||vg zRxS>iyavdFXXc3a=0lAIKK>0Bk?hsDL5CdPoVFQQTX2lbLiRoxJaG9f!vVTzJT7no za6X%6GAFMJLq~LBjo;68A}eZkV*W52JE3V*eaYIN^$d(K4L7=dnO>ppP$GnD##Raj zy;v`2>n9!H$pEEz=;f2CbxA4a(gs)_V|{9@fU)T?*irTq$ryl@VgpPuZnPukQW989 zbm5(9wwuQo$z|a|E65IBxT(jcrZySyP~ZTn+mj63jgm*|1k}x}56-P$>BNHw^An*t{Sk z#sw{Fr7ka`pf+%X00+8SnucoiLdoDpW+8RESWQ1;ybi2`oueS-x>`4#4i9=;xMVb?N)EXEfNKukAb1F013`!26ZikihHrIOkF4Q)3QSDG2AaFa z4?$4pU>HVo`x)Tzg7N;p|E$dHLbna~?Uy?s2WeS>b literal 0 HcmV?d00001 diff --git a/tests/test_graphical_units/test_coordinate_systems.py b/tests/test_graphical_units/test_coordinate_systems.py index d7603f4d00..7d6dad67af 100644 --- a/tests/test_graphical_units/test_coordinate_systems.py +++ b/tests/test_graphical_units/test_coordinate_systems.py @@ -141,3 +141,33 @@ def test_number_plane_log(scene): ) scene.add(VGroup(plane1, plane2).arrange()) + + +@frames_comparison +def test_gradient_line_graph_x_axis(scene): + """Test that using `colorscale` generates a line whose gradient matches the y-axis""" + axes = Axes(x_range=[-3, 3], y_range=[-3, 3]) + + curve = axes.plot( + lambda x: 0.1 * x**3, + x_range=(-3, 3, 0.001), + colorscale=[BLUE, GREEN, YELLOW, ORANGE, RED], + colorscale_axis=0, + ) + + scene.add(axes, curve) + + +@frames_comparison +def test_gradient_line_graph_y_axis(scene): + """Test that using `colorscale` generates a line whose gradient matches the y-axis""" + axes = Axes(x_range=[-3, 3], y_range=[-3, 3]) + + curve = axes.plot( + lambda x: 0.1 * x**3, + x_range=(-3, 3, 0.001), + colorscale=[BLUE, GREEN, YELLOW, ORANGE, RED], + colorscale_axis=1, + ) + + scene.add(axes, curve)