گنوپلات چیست؟
گنوپلات (Gnuplot) یک برنامه خط فرمانی و رابط کاربری گرافیکی است که نمودارهای دوبعدی و سهبعدی توابع، دادهها و برازش دادهها را رسم میکند. این برنامه روی تمام سیستمعاملهای اصلی (لینوکس، یونیکس، ویندوز، مکاواس، فریداس و بسیاری دیگر) اجرا میشود.
این نرمافزار در سال ۱۹۸۶ برای اولین بار منتشر شد. سازندگان فهرستشده آن توماس ویلیامز، کالین کلی، راسل لانگ، دیو کاتز، جان کمپبل، گرشون البِر، الکساندر وو و «بسیاری از افراد دیگر» هستند. با وجود نامش، این نرمافزار هیچ ارتباطی با پروژه گنو (GNU) ندارد.
ویژگیهای گنوپلات
گنوپلات خروجی را مستقیماً روی صفحه نمایش یا در قالب فرمتهای مختلف فایلهای گرافیکی تولید میکند؛ فرمتهایی مانند PNG، EPS، SVG، JPEG و بسیاری دیگر. این ابزار قادر به تولید کد لاتک (LaTeX) نیز هست؛ کدی که مستقیماً در اسناد لاتک قرار میگیرد و از فونتها و قابلیتهای قدرتمند فرمولنویسی لاتک بهره میبرد. کار با گنوپلات هم بهصورت تعاملی و هم بهصورت دستهای با استفاده از اسکریپتها امکانپذیر است.
این برنامه دادهها را در قالبهای متعددی میخواند؛ از جمله دادههایی که بهصورت زنده توسط برنامههای دیگر تولید شدهاند (لولهکشی یا Piping). گنوپلات میتواند چندین نمودار را در یک تصویر رسم کند و نمودارهای دوبعدی، سهبعدی، کانتور و معادلات پارامتریک را پشتیبانی کند. همچنین سیستمهای مختصات خطی و غیرخطی، تصاویر، دادههای جغرافیایی و زمانی، نمودارهای جعبهای (Box plots)، هیستوگرامها، برچسبها و سایر عناصر سفارشی (شامل شکلها، متنها و تصاویر) را بهخوبی مدیریت میکند. این عناصر بهصورت دستی، با اسکریپت یا بهطور خودکار از دادههای ورودی تنظیم میشوند.
گنوپلات قابلیتهای اسکریپتنویسی، حلقهها، توابع، پردازش متن، متغیرها، ماکروها و پیشپردازش دلخواه دادههای ورودی (معمولاً در ستونها) را فراهم میکند. همچنین توانایی انجام برازش دادههای وزندار، چندبعدی و چندمجموعهای غیرخطی را دارد (به الگوریتم لونبرگ-مارکاردت و برازش منحنی مراجعه کنید).
کد هسته گنوپلات به زبان C نوشته شده است. زیرسیستمهای ماژولار برای خروجی از طریق Qt، wxWidgets و LaTeX/TikZ/ConTeXt به زبانهای C++ و لوا (Lua) برنامهنویسی شدهاند.
نمونه کد رسم نمودار
کد زیر نمودار توابع ریاضی را رسم میکند:
set title "Some Math Functions"
set xrange [-10:10]
set yrange [-2:2]
set zeroaxis
plot (x/4)**2, sin(x), 1/x
نامگذاری و تاریخچه
نام این برنامه در ابتدا برای جلوگیری از تداخل با برنامهای به نام «نیوپلات» (newplot) انتخاب شد؛ نامی که در واقع مصالحهای بین «لاماپلات» (llamaplot) و «انپلات» (nplot) بود.
پشتیبانی از فرمتهای روزانه و هفتگی همهگیری در نسخه ۵.۴.۲، نتیجه نیاز به دادههای همهگیری کروناویروس است.
شرایط توزیع
همانطور که اشاره شد، گنوپلات نه به پروژه گنو تعلق دارد و نه از مجوز عمومی همگانی گنو (GPL) استفاده میکند. نام آن صرفاً یک بازی زبانی با کلمه گنو (حیوان) و نیوپلات بوده است.
کد منبع رسمی گنوپلات بهصورت رایگان قابل توزیع مجدد است، اما نسخههای تغییر یافته آن اینگونه نیستند. مجوز گنوپلات در عوض، توزیع وصلهها (Patches) نسبت به نسخههای رسمی را اجازه میدهد؛ وصلههایی که اختیاراً با کد منبع رسمی همراه میشوند. فایلهای باینری بههمراه کد منبع تغییر نیافته و وصلههای اعمالشده قابل توزیعاند. برای پشتیبانی فنی نرمافزار تغییر یافته، اطلاعات تماس باید در آثار مشتقشده ارائه شود.
اجازه تغییر نرمافزار داده شده، اما حق توزیع کامل کد منبع تغییر یافته خیر. تغییرات باید بهصورت وصله برای نسخه منتشرشده توزیع شوند.
با وجود این محدودیت، گنوپلات در بسیاری از بستههای گنو پذیرفته و استفاده شده و بهطور گسترده در توزیعهای لینوکس (حتی توزیعهای سختگیرانهای مانند دبیان و فدورا) گنجانده میشود. تعریف متنباز OSI و دستورالعملهای نرمافزار آزاد دبیان، بهطور خاص با فرض اجازه صریح توزیع وصلهها و کد منبع، محدودیت در توزیع کد منبع تغییر یافته را مجاز میدانند.
ماژولهای جدیدتر گنوپلات (مانند درایورهای Qt، wxWidgets و Cairo) تحت شرایط مجوز دوگانه (مثلاً گنوپلات + BSD یا گنوپلات + GPL) ارائه شدهاند.
رابطهای گرافیکی و برنامههای مبتنی بر گنوپلات
چندین برنامه شخص ثالث رابط کاربری گرافیکی دارند که از گنوپلات بهعنوان موتور رسم نمودار استفاده میکنند:
- gretl: بسته آماری برای اقتصادسنجی
- JGNUPlot: یک رابط گرافیکی مبتنی بر جاوا
- Kayali: یک سیستم جبر کامپیوتری
- xldlas: یک بسته آماری قدیمی X11
- gnuplotxyz: یک برنامه قدیمی ویندوز
- wxPinter: یک مدیریت نمودار گرافیکی برای گنوپلات
- Maxima: یک سیستم جبر کامپیوتری متنی که خود چندین رابط گرافیکی شخص ثالث دارد.
سایر برنامههایی که از گنوپلات استفاده میکنند عبارتند از:
- GNU Octave: یک زبان برنامهنویسی ریاضی
- statist: یک برنامه مبتنی بر ترمینال
- gplot.pl: یک رابط خط فرمانی سادهتر ارائه میدهد.
- feedgnuplot: رسم دادههای ذخیرهشده و بلادرنگ از لوله (Pipe) را فراهم میکند.
- ElchemeaAnalytical: برنامه رسم و برازش طیفسنجی امپدانس توسعهیافته توسط DTU Energy
- افزونه گنوپلات برای مایکروسافت اکسل
- Calc: ماشینحساب گنو ایمکس
رابطهای برنامهنویسی و کاربردی
گنوپلات را میتوان از زبانهای برنامهنویسی مختلفی برای رسم دادهها استفاده کرد؛ از جمله پرل (از طریق PDL و بستههای دیگر CPAN)، پایتون (از طریق gnuplotlib، Gnuplot-py و SageMath)، آر (از طریق Rgnuplot)، جولیا (از طریق Gaston.jl)، جاوا (از طریق JavaGnuplotHybrid و jgnuplot)، روبی (از طریق Ruby Gnuplot)، چ (از طریق Ch Gnuplot)، هسکل (از طریق Haskell gnuplot)، فورترن ۹۵، اسمالتاک (Squeak و GNU Smalltalk) و راست (از طریق RustGnuplot).
گنوپلات همچنین از لولهکشی (Piping) پشتیبانی میکند؛ ویژگیای که در اسکریپتها رایج است. برای گرافیکهای مبتنی بر اسکریپت، گنوپلات یکی از محبوبترین برنامههاست.
فرمتهای خروجی گنوپلات
گنوپلات به کاربر اجازه میدهد نمودارها را به چندین شیوه نمایش یا ذخیره کند:
- در کنسول (حالتهای خروجی dumb و sixel)
- در پنجره دسکتاپ (حالتهای خروجی Qt، wxt، X11، aquaterm، win و ...)
- جاسازیشده در صفحه وب (حالتهای خروجی SVG، HTML5، PNG، JPEG، GIF متحرک و ...)
- فرمتهای فایل طراحیشده برای پردازش اسناد (حالتهای خروجی PostScript، PDF، cgm، emf، انواع لاتک و ...)