Маскирование данных с помощью nan
в том виде, в котором вы это делаете, является хорошим и практичным решением.
Так как 3D-графики matplotlib представляют собой проекции в 2D-пространство, было бы сложно реализовать автоматическое отсечение. Хотя я думаю, что это будет возможно, я не уверен, что это стоит усилий. Во-первых, потому что вам нужно будет обрабатывать разные типы сюжетов по-разному, во-вторых, потому что, по крайней мере, в некоторых случаях, вероятно, окажется, что маскирование данных по-прежнему является лучшим выбором. Теперь выполнение сложного подкласса объектов построения объектов только для того, чтобы сделать то же самое, что можно сделать вручную в одной или двух строках, возможно, слишком велико.
Таким образом, моя ясная рекомендация будет заключаться в использовании решения, которое у вас уже есть. Тем более, что пока у него нет никаких недостатков.
Вы можете попробовать сами:
#! /bin/bash
set -eu
chars=({a..z})
rm -rf git
mkdir git
cd git
git init
git config user.email name@example.com
for (( i = 0; i <= 10000 ; ++i )) ; do
printf ${chars[RANDOM % 26]} >> a
time git add a
time git commit -m "Change $i"
du -s .git
done
Если скорость становится слишком медленной, попробуйте запустить git gc
или git repack
.