ManimCommunity / ManimCommunity/manim

plot shrinks faster than x_axis when changing x_range

Open
#3,975 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Python
Stars
40.9k
Forks
3.1k
Avg merge
3d 12h
Merged PRs (30d)
25

Description

## Description of bug / unexpected behavior

When plotting a function in an axis environment, if the `x_axis` range is changed using a `ValueTracker`, and the same `ValueTracker` is used as function range, the function does not plot on the expected range. Here is a MWE:

```py
from manim import *

class VaryingSupportSineWave(MovingCameraScene):

def construct(self):

x_max = ValueTracker(10)
ax = always_redraw(lambda: Axes(
x_range=[0, x_max.get_value(), 1],
y_range=[-1, 1, 0.5],
x_length=x_max.get_value()
).to_edge(LEFT))
self.add(ax)

sine_wave = always_redraw(lambda: ax.plot(lambda x: np.sin(x),
x_range=(0, x_max.get_value())))

self.play(Create(sine_wave))
self.play(x_max.animate.set_value(6))
self.wait(0.5)
```

## Expected behavior

- the axes are drawn and the `x_axis` is ten units wide
- the sine wave is added and plotted up to ten units
- the x_axis shrinks down to six units, each unit is still one munit wide (no scaling effect, the axis only gets shorter), and the sine wave is now drawn also on only six units

![image](https://github.com/user-attachments/assets/3e2f5f1a-819c-4e8a-ad95-e6f5f560cd00)

## Actual behavior

- the axes are drawn and the `x_axis` is ten units wide
- the sine wave is added and plotted up to ten units
- the x_axis shrinks down to six units, each unit is still one munit wide (no scaling effect, the axis only gets shorter), **BUT** the sine wave is now drawn on only about 3.5 units, **and it has been scaled down!**

![image](https://github.com/user-attachments/assets/3dc72a25-0ece-40b6-82c8-d81181649b0a)

## Logs
Terminal output

```
Manim Community v0.18.1

[10/24/24 09:00:31] ERROR module_ops.py:92
VaryingSupportSineWave is not in the
script

DEBUG Hashing ... hashing.py:352
DEBUG Hashing done in 0.006856 s. hashing.py:364
DEBUG Hash generated : hashing.py:367
3348903278_2543047096_4133455014
INFO Animation 0 : Using cached data (hash : cairo_renderer.py:88
3348903278_2543047096_4133455014)
DEBUG List of the first few animation hashes cairo_renderer.py:97
of the scene:
['3348903278_2543047096_4133455014']
DEBUG Hashing ... hashing.py:352
DEBUG Hashing done in 0.006311 s. hashing.py:364
DEBUG Hash generated : hashing.py:367
2784548031_3175177803_765666942
INFO Animation 1 : Using cached data (hash : cairo_renderer.py:88
2784548031_3175177803_765666942)
DEBUG List of the first few animation hashes cairo_renderer.py:97
of the scene:
['3348903278_2543047096_4133455014',
'2784548031_3175177803_765666942']
DEBUG Animation with empty mobject animation.py:175
DEBUG Hashing ... hashing.py:352
DEBUG Hashing done in 0.006665 s. hashing.py:364
DEBUG Hash generated : hashing.py:367
2784548031_774239770_1835257284
INFO Animation 2 : Using cached data (hash : cairo_renderer.py:88
2784548031_774239770_1835257284)
DEBUG List of the first few animation hashes cairo_renderer.py:97
of the scene:
['3348903278_2543047096_4133455014',
'2784548031_3175177803_765666942',
'2784548031_774239770_1835257284']
INFO Combining to Movie file. scene_file_writer.py:617
DEBUG Partial movie files to combine (3 scene_file_writer.py:561
files):
['/Users/username/Library/Cl
oudStorage/someplace/Python/
18_manim/src/media/videos/test_script/
720p30/partial_movie_files/VaryingAm
plitudeSineWave/3348903278_254304709
6_4133455014.mp4',
'/Users/username/Library/Clo
udStorage/someplace/Python/1
8_manim/src/media/videos/test_script/7
20p30/partial_movie_files/VaryingAmp
litudeSineWave/2784548031_3175177803
_765666942.mp4',
'/Users/username/Library/Clo
udStorage/someplace/Python/1
8_manim/src/media/videos/test_script/7
20p30/partial_movie_files/VaryingAmp
litudeSineWave/2784548031_774239770_
1835257284.mp4']
INFO scene_file_writer.py:737
File ready at
'/Users/username/Library/Clo
udStorage/someplace/Python/1
8_manim/src/media/videos/test_script/7
20p30/VaryingAmplitudeSineWave.mp4'

INFO Rendered VaryingAmplitudeSineWave scene.py:247
Played 3 animations
[10/24/24 09:00:32] INFO Previewed File at: file_ops.py:231
'/Users/username/Library/CloudStorage
/someplace/Python/18_manim/src/media/
videos/test_script/720p30/VaryingAmplitudeSineW
ave.mp4'

```

## System specifications

System Details

- OS: macOS Sonoma 14.2.1 (23C71)
- RAM: 32Go
- Python version (`python/py/python3 --version`): 3.12
- Installed modules (provide output from `pip list`):
```
Package Version
------------------------- ---------------
ansi2html 1.9.1
anyio 4.2.0
appnope 0.1.3
argon2-cffi 23.1.0
argon2-cffi-bindings 21.2.0
arrow 1.3.0
asttokens 2.4.1
async-lru 2.0.4
attrs 23.2.0
Babel 2.14.0
beautifulsoup4 4.12.3
bleach 6.1.0
blinker 1.7.0
Brotli 1.1.0
certifi 2023.11.17
cffi 1.16.0
charset-normalizer 3.3.2
click 8.1.7
cloup 3.0.5
colour 0.1.5
comm 0.2.1
contourpy 1.2.0
cycler 0.11.0
Cython 3.0.11
dash 2.14.2
dash-core-components 2.0.0
dash-html-components 2.0.0
dash-table 5.0.0
dataclasses 0.6
debugpy 1.8.0
decorator 5.1.1
defusedxml 0.7.1
et-xmlfile 1.1.0
executing 2.0.1
fastjsonschema 2.19.1
Flask 3.0.0
fonttools 4.25.0
fqdn 1.5.1
glcontext 3.0.0
idna 3.6
importlib-metadata 7.0.0
ipykernel 6.29.0
ipython 8.20.0
ipywidgets 8.1.1
isoduration 20.11.0
isosurfaces 0.1.2
itsdangerous 2.1.2
jedi 0.19.1
Jinja2 3.1.2
joblib 1.3.2
json5 0.9.14
jsonpickle 3.0.2
jsonpointer 2.4
jsonschema 4.21.1
jsonschema-specifications 2023.12.1
jupyter 1.0.0
jupyter_client 8.6.0
jupyter-console 6.6.3
jupyter_core 5.7.1
jupyter-events 0.9.0
jupyter-lsp 2.2.2
jupyter_server 2.12.5
jupyter_server_terminals 0.5.2
jupyterlab 4.0.11
jupyterlab_pygments 0.3.0
jupyterlab_server 2.25.2
jupyterlab-widgets 3.0.9
kiwisolver 1.4.4
manim 0.18.1
ManimPango 0.4.4
mapbox_earcut 1.0.2
markdown-it-py 3.0.0
MarkupSafe 2.1.3
matplotlib 3.8.2
matplotlib-inline 0.1.6
mdurl 0.1.2
mistune 3.0.2
moderngl 5.11.1
moderngl-window 2.4.6
mpmath 1.3.0
multipledispatch 1.0.0
munkres 1.1.4
music-tag 0.4.3
mutagen 1.47.0
nbclient 0.9.0
nbconvert 7.14.2
nbformat 5.9.2
nest-asyncio 1.5.8
networkx 3.3
notebook 7.0.7
notebook_shim 0.2.3
numpy 1.26.2
openpyxl 3.1.2
overrides 7.7.0
packaging 23.1
pandas 2.1.4
pandas-flavor 0.6.0
pandocfilters 1.5.1
parso 0.8.3
patsy 0.5.6
pexpect 4.9.0
Pillow 10.0.1
pingouin 0.5.5
pip 23.3.1
platformdirs 4.1.0
plotly 5.18.0
prometheus-client 0.19.0
prompt-toolkit 3.0.43
psutil 5.9.8
ptyprocess 0.7.0
pure-eval 0.2.2
pycairo 1.27.0
pycparser 2.21
pycryptodomex 3.20.0
pydub 0.25.1
pyglet 2.0.17
Pygments 2.17.2
pyobjc-core 10.3.1
pyobjc-framework-Cocoa 10.3.1
PyOpenGL 3.1.7
pyparsing 3.0.9
PyQt5 5.15.10
PyQt5-Qt5 5.15.11
PyQt5-sip 12.13.0
PyQt6 6.6.1
PyQt6-Qt6 6.6.1
PyQt6-sip 13.6.0
pyrr 0.10.3
pyserial 3.5
python-dateutil 2.8.2
python-json-logger 2.0.7
pytz 2023.3.post1
PyYAML 6.0.1
pyzmq 25.1.2
qtconsole 5.5.1
QtPy 2.4.1
referencing 0.32.1
requests 2.32.3
retrying 1.3.4
rfc3339-validator 0.1.4
rfc3986-validator 0.1.1
rich 13.9.2
rpds-py 0.17.1
scikit-learn 1.3.2
scipy 1.11.4
screeninfo 0.8.1
seaborn 0.13.2
Send2Trash 1.8.2
setuptools 68.0.0
si-prefix 1.3.3
six 1.16.0
skia-pathops 0.8.0.post1
sniffio 1.3.0
soundfile 0.12.1
soupsieve 2.5
srt 3.5.3
stack-data 0.6.3
statsmodels 0.14.3
sty 1.0.6
svgelements 1.9.6
sympy 1.13.3
tabulate 0.9.0
tenacity 8.2.3
terminado 0.18.0
threadpoolctl 3.2.0
tikzplotlib 0.10.1
tinycss2 1.2.1
tornado 6.3.3
tqdm 4.66.5
traitlets 5.14.1
types-python-dateutil 2.8.19.20240106
typing_extensions 4.9.0
tzdata 2023.3
uri-template 1.3.0
urllib3 2.1.0
validators 0.34.0
watchdog 5.0.3
wcwidth 0.2.13
webcolors 1.13
webencodings 0.5.1
websocket-client 1.7.0
websockets 12.0
Werkzeug 3.0.1
wheel 0.41.2
widgetsnbextension 4.0.9
xarray 2024.9.0
yt-dlp 2024.7.25
zipp 3.17.0
```

LaTeX details

+ LaTeX distribution: TeX Live 2023
+ Installed LaTeX packages: no other than TeX Live 2023 base install.

----

**Note:** the issue has been evoked [here](https://www.reddit.com/r/manim/comments/1ga4wq8/curve_shrinks_faster_than_the_axes_upon_resizing/).

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Run the provided VaryingSupportSineWave MWE first, then trace the Axes, x_axis, plot, ValueTracker, and always_redraw update paths involved in the changing x_range. Compare the axis and sine-wave geometry before and after changing x_max; done means the axis shortens to six units while the function remains correctly plotted through six units without unintended scaling.

Written by the indexing model from the issue text.

Assessment

Tech stack
numpy, python
Domain
computer-graphics
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.