Skip to main content
QUICK REVIEW

[논문 리뷰] Plots.jl -- a user extendable plotting API for the julia programming language

Simon Christ, Daniel Schwabeneder|arXiv (Cornell University)|2022. 04. 19.
Advanced Computational Techniques and Applications인용 수 8
한 줄 요약

Plots.jl은 Julia 언어를 위한 통합적이고 사용자 정의 가능한 플로팅 API를 도입하여 레시피 시스템을 통해 플롯 사양과 렲린드 백엔드를 분리한다. 이는 사용자가 플랫폼에 종속되지 않는 플로팅 코드를 작성하고 백엔드를 원활하게 전환할 수 있도록 하며, 패키지 개발자가 차분 방정정식 해나 계통수와 같은 사용자 정의 타입에 대한 시각화 지원을 패키지 로드 시간이 증가하지 않도록 확장할 수 있도록 한다.

ABSTRACT

There are many excellent plotting libraries. Each excels at a specific use case: one is particularly suited for creating printable 2D figures for publication, another for generating interactive 3D graphics, while a third may have excellent LATEX integration or be ideal for creating dashboards on the web. The aim of Plots.jl is to enable the user to use the same syntax to interact with a range of different plotting libraries, making it possible to change the library that does the actual plotting (the backend) without needing to touch the code that creates the content – and without having to learn multiple application programming interfaces (API). This is achieved by separating the specification of the plot from the implementation of the graphical backend. This plot specification is extendable by a recipe system that allows package authors and users to create new types of plots, as well as to specify how to plot any type of object (e.g. a statistical model, a map, a phylogenetic tree or the solution to a system of differential equations) without depending on the Plots.jl package. This design supports a modular ecosystem structure for plotting and yields a high code reuse potential across the entire Julia package ecosystem. Plots.jl is publicly available at https://github.com/JuliaPlots/Plots.jl.

연구 동기 및 목표

  • 플로팅 로직과 렌더링 백엔드를 분리하여 Julia에서 '첫 번째 플롯까지의 시간' 지연을 해결하기 위해.
  • 패키지 개발자가 자신의 사용자 정의 타입에 대한 시각화 지원을 제공할 수 있도록 하되, 패키지 로드 시간이 증가하지 않도록 하기 위해.
  • 2D, 3D, 웹, LaTeX 출력 등 다양한 플로팅 라이브러리에 대한 통합된 접근 방식을 단일이고 일관된 API로 통합하기 위해.
  • 새로운 플롯 타입과 백엔드를 별도로 추가할 수 있는 모듈러하고 조합 가능한 생태계를 지원하기 위해.

제안 방법

  • 입력 타입에 따라 적절한 백엔드로 플롯 호출을 라우팅하기 위해 Julia의 다형 디스패치를 활용한다.
  • 사용자와 패키지 개발자가 키워드 인수와 seriestype를 사용하여 ODE 해나 지도, 트리와 같은 사용자 정의 타입을 렌더링하는 방법을 정의할 수 있는 '레시피' 시스템을 도입한다.
  • 플롯 사양(플롯 함수를 통해)과 렌더링(예: PGFPlotsX 또는 GR과 같은 백엔드 전용 백엔드를 통해)을 분리한다.
  • RecipesBase.jl을 경량 종속성으로 사용하여 패키지 로드 시에 전체 Plots.jl 종속성을 요구하지 않도록 한다.
  • 키워드 인수를 통해 플롯, 서브플롯, 축, 시리즈 수준의 계층적 속성 제어를 가능하게 하여 세밀한 커스터마이제이션을 지원한다.
  • 단일 함수 호출(예: `pgfplotsx()`)을 통해 백엔드 전환을 가능하게 하여 사용자가 플롯 코드를 수정하지 않고도 렌더링 출력을 변경할 수 있도록 한다.

실험 결과

연구 질문

  • RQ1성능와 확장성은 유지하면서 백엔드 차이를 추상화할 수 있는 통합된 플로팅 API를 Julia에서 구축할 수 있는가?
  • RQ2패키지 개발자가 자신의 사용자 정의 타입에 대한 시각화 지원을 제공할 때 패키지 로드 시간이 증가하지 않도록 할 수 있는가?
  • RQ3레시피 기반 시스템이 모듈러한 생태계에서 여러 플로팅 백엔드 간의 상호 운용성을 어느 정도 향상시킬 수 있는가?
  • RQ4단일 API 문법이 2D 발표용 고해상도 그림부터 인터랙티브 3D 그래픽, 웹 대시보드에 이르기까지 다양한 용도를 지원할 수 있는가?
  • RQ5레시피 시스템이 Julia 패키지 생태계 전반에서 높은 코드 재사용성과 확장성을 어떻게 가능하게 하는가?

주요 결과

  • Plots.jl는 2019년과 2020년 Julia 언어 설문조사에서 커뮤니티가 가장 선호하는 Julia 패키지로 선정되었으며, 사용자 47%가 선호 패키지로 지명했다.
  • 레시피 시스템을 통해 패키지 개발자는 ODE 해나 통계 모델과 같은 새로운 타입에 대한 시각화를 RecipesBase.jl만으로 최소한의 종속성으로 정의할 수 있다.
  • 지금까지 Julia 레지스트리에 등재된 300개 이상의 패키지가 Plots.jl 레시피를 포함하고 있어 생태계 통합과 재사용 잠재력이 높음을 보여준다.
  • 하루 평균 500~2000회 다운로드를 기록하여 과학 계산, 교육, 논문 제출 워크플로우에서 지속적인 사용이 이루어지고 있음을 나타낸다.
  • 사양과 백엔드의 분리 덕분에 사용자 코드를 수정하지 않고도 백엔드를 원활하게 전환할 수 있다(예: LaTeX 출력용 PGFPlotsX, 인터랙티브 플롯용 GR).
  • 레시피 시스템은 Makie.jl와 같은 다른 Julia 플로팅 라이브러리에서도 유사한 구현을 유도하여 그 아키텍처적 영향력을 확인시켰다.

더 나은 연구,지금 바로 시작하세요

연구 설계부터 논문 작성까지, 연구 시간을 획기적으로 줄여보세요.

카드 등록 없음 · 무료 플랜 제공

이 리뷰는 AI가 만들고, 인간 에디터가 검토했습니다.