من چندین سال است که از پایتون برای انجام محاسبات علمی و ساخت کلیه نقشههای خود استفاده میکنم. انگیزههای اصلی من برای استفاده از پایتون این بوده است که ۱. پایتون منبع باز است و ۲. مقدار فضای هارد دیسک را که توسط MATLAB اشغال کرده مناسب است. همچنین نداشتن نگرانی در مورد به روز نگه داشتن مجوزهای نرم افزار به عنوان یک مزیت اضافه شده است. انبوه آزمایش و خطاها و جستجوی گوگل که باید انجام میدادم تا زمانی که پارامترهای “عالی” را برای طرحهای خود پیدا کنم، باعث شده است که این مقاله را گردآوری کنم. هم به عنوان یک ابزار آموزنده برای خوانندگان خارج، و هم راهی برای من که مواردی را برای خودم مستند کنم. اما امیدوارم این آموزش بتواند به تنظیمات و پارامترهای مهمی و رسم نمودار داده در پایتون اشاره کند که به شما امکان میدهد هر مجموعه داده را به دلخواه شخصی خود تنظیم کنید. اگر آناكوندا را از قبل ندارید، نصب آن را توصیه میكنم زیرا شامل تمام بستههای مورد نیاز برای تجزیه و تحلیل دادهها است.
رسم نمودار داده در پایتون | وارد کردن بستهها
اکثر توابع استفاده شده در بسته matplotlib است (با بیشتر توابع رسم از زیر بسته matplotlib.pyplot). علاوه بر این، من معمولاً numpy را برای هر محاسبه سریع و pylab را برای تولید سریع رنگ از هر نقشه رنگی داخلی وارد میکنم. اغلب اوقات، هنگامی که بستهها را وارد میکنیم، یک نام مستعار کوتاه فرم ایجاد میکنیم (به عنوان مثال mpl برای matplotlib) بنابراین میتوانیم به جای تایپ کردن هر بار matplotlib، با استفاده از نام مستعار به عملکردهای آن مراجعه کنیم.
بارگیری دادهها (Loading Data)
از آنجا که دادههای ابزار علمی معمولاً نسبتاً ساده هستند (معمولاً فقط یک متغیر مستقل است که کنترل میکنیم و یک متغیر وابسته اندازه گیری شده است)، میتوانیم از numpy.loadtxt برای وارد کردن دادههای خود استفاده کنیم. برای مجموعه دادههای پیچیدهتر، من بسیار توصیه میکنم که از پانداها (pandas) استفاده کنید، که عملکردهای فوق العاده پیچیدهای برای بارگیری و پاکسازی دادهها برای تجسم دارد، یک اسناد جامع را میتوانید در اینجا پیدا کنید. برای این مثال، من یک فایل به نام Absorbance_Data.csv با برخی از دادههای جذب برای دو نمونه جمع آوری شده در دستگاه اسپکتروفتومتر دارم.
با دستور زیر میتوانیم این دادهها را در اسکریپت خود بارگذاری کنیم:
پرونده خود را به همراه پارامترها به تابع numpy.loadtxt منتقل میکنیم:
unpack
: هر ستون را به یک آرایه انتقال میدهد، به شما امکان میدهد چندین متغیر را همزمان ببندید (طول موج، samp_1_abs ، samp_2_abs)delimiter
: شخصیت جداکننده که برای جداسازی ستونها استفاده میشودskiprows
:مقدار ردیفی که باید در بالای پرونده رد شود (از آنجا که ردیف اول عنوان ستون است، ما میخواهیم این را رد کنیم بنابراین skiprows = 1)
رسم نمودار داده در پایتون | رسم اطلاعات ما
هنگامی که داده های جذب خود را بارگیری کردیم ، می توانیم به سرعت هر دو مجموعه داده را با کد زیر ترسیم کنیم:
دادهها به درستی رسم میشوند، اما تنظیمات پیش فرض matplotlib به خوبی رقم کیفیت انتشار را نشان نمیدهد. همانطور که برخی از پارامترهای زیر را تغییر میدهیم، در انتها به یک طرح بسیار بهتر خواهیم رسید.
Fonts
این تنظیماتی است که من زمان زیادی را صرف آن میکنم، انتخاب فونت مناسب برای نقشههایم. سیستم شما از قبل دارای یک لیست طولانی از فونتهای از پیش نصب شده است و شما میتوانید با استفاده از موارد زیر بررسی کنید که کدام فونتها از قبل برای matplotlib در دسترس هستند:
اگر میخواهید یک فونت جدید اضافه کنید و سپس از آن برای نقشهها استفاده کنید، این نیز امکان پذیر است. ابتدا باید فونت مورد نظر خود را بارگیری و نصب کنید، گزینههای زیادی را میتوانید در اینجا پیدا کنید. پس از نصب، باید حافظه پنهان فونت را از نو بسازید تا هنگام ساختن شکل، در دسترس matplotlib باشد. ما این کار را به صورت زیر انجام میدهید:
اگر اکنون لیست فونتهای موجود را بررسی میکنید، باید فونت جدیدی را که به تازگی نصب کردهاید مشاهده کنید.
رسم نمودار داده در پایتون | پارامترهای کلی نمودار
سه پارامتر کلی که در ابتدای اسکریپت نمودار خود تنظیم کردم عبارتند از: قلم، اندازه قلم و عرض خط محور. اینها اساساً پارامترهای سراسری هستند که بعداً آنها را ویرایش نمیکنم، بنابراین تنظیم آنها در ابتدا همه چیز را راحتتر میکند (یعنی لازم نیست برای هر برچسب پایین خط به طور واضح قلم و اندازه را تعیین کنید). ما باید کد زیر را قبل از تولید هرگونه ارقام اضافه کنیم، بنابراین من آن را بلافاصله پس از وارد کردن بستهها بلافاصله در بالای اسکریپت قرار میدهم.
مجموعهای از رنگها را ایجاد کنید
اگر مجموعهای از رنگها را دارید که دوست دارید از آنها استفاده کنید، آزاد هستید که از این مرحله صرف نظر کنید. در این حالت، از آنجا که فقط دو نمونه داریم، بهتر است به صورت دستی دو رنگ با شدت بالا را انتخاب کنید. اما، اگر میخواهید لیستی از رنگها ایجاد کنید بدون اینکه تلاش زیادی برای شما انجام شود، ما میتوانیم با استفاده از بسته pylab که وارد کردهایم لیستی از آنها را از انواع رنگ آمیزی داخلی matplotlib تولید کنیم که میتوانید در اینجا پیدا کنید. این مورد هنگامی که به تعداد زیادی رنگ نیاز دارید بسیار مفید واقع میشود، زیرا میتوانید آنها را به صورت برنامه ریزی تولید کنید.
برای مجموعه دادههای ما، ما فقط علاقه مندیم که به راحتی ردپای خود را از هم تشخیص دهیم، بنابراین بهترین کار ما این است که با استفاده از یکی از نقشههای رنگی در بخش کیفی (من از “tab10” برای این مثال استفاده خواهم کرد). ما از کد زیر استفاده میکنیم، اولین آرگومان نام colormap است و دومی تعداد رنگهایی است که میخواهیم تولید کنیم:
اگر برای مثال میزان وابستگی به دما را در یک نمونه اندازه گیری میکردیم و میخواستیم طیفها را در دماهای مختلف ترسیم کنیم، میتوانیم از یک نقشه رنگ واگرا مانند “گرمسیر” استفاده کنیم. درنهایت، نقشه رنگی که انتخاب میکنید به شما بستگی دارد و بر اساس نوع دادهای است که در نظر میگیرید.
رسم نمودار داده در پایتون | شکل و محورها را ایجاد کنید
ما باید یک شکل، که یک پنجره خالی است، ایجاد کنیم و سپس برای طرح خود یک شی axes به آن اضافه کنیم. برای تولید شکل، موارد زیر را داریم:
figsize
: اندازه شکل ما (عرض ، ارتفاع) در اینچ ، با مقدار پیش فرض (۶/۴ ، ۴/۸)
اکنون باید با تعیین مختصات پایین سمت چپ و عرض و ارتفاع در مختصات نسبی، یک شی محور به شکل خالی خود اضافه کنیم (۱ اندازه کامل پنجره شکل است). اگر بخواهیم کل شکل ما را پر کند، میتوانیم [۰ ، ۰ ، ۱ ، ۱] را تعیین کنیم که گوشه پایین سمت چپ را روی (۰ ، ۰) و عرض و ارتفاع را به ۱ تنظیم میکند.
ما می توانیم از این ساختار محور برای ساختن شکل و صفحههای پوششی با ساخت چندین آبجکت به صورت زیر استفاده کنیم:
خارها را بردارید
اگر نمیخواهیم طرح ما کاملاً محصور باشد، میتوانیم خارهای بالا و راست را به صورت زیر برداریم:
رسم نمودار داده در پایتون | پارامترهای تیک (Tick Parameters)
ما می توانیم عرض و طول تیکها را متناسب با پارامترهای محور خود با کد زیر ویرایش کنیم. اگر کنههای جزئی داشته باشیم، میتوانیم خصوصیات اینها را نیز ویرایش کنیم:
which
– ویرایش علامتهای اصلی، جزئی یا هر دوsize
– طول تیکها در نقاطwidth
– عرض خط کنه ها (می توانیم این را برابر با عرض خط محور خود قرار دهیم)direction
– تیکها به داخل، خارج یا ورودی وارد میشوند (هر دو)top
/right
– تیکهایی در محورهای ثانویه وجود خواهد داشت (بالا / راست)
رسم و تنظیم محدوده / تیکها
اکنون میتوانیم دادههای خود را با استفاده از رنگهایی که از colormap تولید کردهایم برای تشخیص نمونهها ترسیم کنیم:
linewidth
: عرض خط در طرحcolor
: رنگ خط در طرحlabel
: برچسب برای ردیابی
اکنون میتوانیم محدودههای محور x و y را با خطوط زیر تنظیم کنیم:
متوجه میشویم که علامتهای تیک بین دو محور نامتعادل به نظر میرسند، همچنین میتوانیم با استفاده از تابعی به نام MultipleLocator این ویرایش را به صورت نیمه دستی ویرایش کنیم که باعث ایجاد تیک در هر چند عدد پایهای میشود که ارائه میدهیم. ما باید major_locator را برای تیکهای اصلی و minor_locator را برای تیکهای جزئی ویرایش کنیم. ما تیکهای اصلی را هر ۱۰۰ نانومتر و تیکهای جزئی را هر ۵۰ نانومتر برای محور x و تیکهای اصلی را هر ۰/۵ و تیکهای کوچک را هر ۰/۲۵ را برای محور y تنظیم خواهیم کرد.
رسم نمودار داده در پایتون | برچسبهای Axis
ما باید برچسبها را به محورهای x و y اضافه کنیم، که به راحتی میتوانیم آنها را با کد زیر انجام دهیم:
labelpad
: پدینگ اضافی بین برچسب تیک و برچسب Axis
اگر می خواهید نویسههای یونانی را در برچسبهای خود بگنجانید، میتوانید از نحو LaTeX برای این کار استفاده کنید. ما یک رشته خام را با قرار دادن رشته با r ایجاد میکنیم و دستور LaTeX را با $$
ضمیمه میکنیم. با این وجود، این از قلم LaTeX پیش فرض برای نویسههای یونانی استفاده میکند. اگر بخواهیم از همان قلم بقیه طرح استفاده کنیم (با فرض وجود کاراکتر)، دستور خود را با $\mathregular{'Command goes here'}$
ضمیمه میکنیم.
Axis Ticksهای ثانویه
اگر بخواهیم تیکها را در یکی از محورهای ثانویه (بالا / راست) قرار دهیم تا مجموعه داده یا مقیاس بندی دیگری نشان داده شود، میتوانیم این کار را با استفاده از یک محور انگلی (parasitic axis) انجام دهیم. این شی محورها یکی از محورهای طرح اصلی را کپی میکند و به شما امکان میدهد مقیاس بندی را از طرف دیگر تغییر دهید. برای نشان دادن این، میتوانیم از دادههای جذب خود به عنوان مثال استفاده کنیم. محور x جریان، طول موج نور جذب شده است، اما بر اساس کاربرد، انرژی این نور میتواند پارامتر مربوطه باشد.
ما میتوانیم یک محور x دوم در بالای نمودار ایجاد کنیم تا مقیاس انرژی را نشان دهیم. اول، ما باید یک محور انگلی یا با دستور twinx()
یا twiny()
ایجاد کنیم تا به ترتیب محورهای x یا y را شبیه سازی کنیم. در این مثال، ما ثابت دادههای محور y را میخواهیم، بنابراین محور y را شبیه سازی خواهیم کرد. همچنین باید پارامترهای تیک این محور x جدید را با محور x طرح قدیمی مطابقت دهیم (و top='on'
را از پارامترهای اصلی x-axis حذف کنیم).
برای اینکه کار ما در افزودن تیک در واحدهای انرژی به این محور راحتتر باشد، میتوانیم تابعی را برای تبدیل انرژی به طول موج بنویسیم (از آنجا که تیکها را در محور طول موج در نقاطی قرار میدهیم که مقادیر انرژی با آنها مطابقت داشته باشد). ورودی E را به عنوان یک آرایه در نظر خواهیم گرفت تا بتوانیم همه تبدیلها را همزمان انجام دهیم:
از آنجا که این یک تحول غیر خطی است ، ما نمیتوانیم به راحتی از تابع MultipleLocator
استفاده کنیم و با استفاده از تابعی به نام FixedLocator
نشانههای تیک را به صورت دستی اضافه خواهیم کرد. برای استفاده از FixedLocator
ما یک آرایه از تمام مکانهایی که میخواهیم در آنها علامت تیک باشد وجود دارد:
از آنجا که ما تیکها را به صورت دستی اضافه کردیم، باید برچسبهای اصلی تیکها را نیز به صورت دستی اضافه کنیم.
سرانجام، ما همچنین می خواهیم یک برچسب محور به محور x جدید خود اضافه کنیم و مطمئن شویم که محدودههای محور همان محور x اصلی هستند:
رسم نمودار داده در پایتون | ذخیره طرح شما
سرانجام ، ذخیره طرح نهایی شما بسیار ساده است – برای این کار می توانیم از تابع plt.savefig
استفاده کنیم.
dpi
: وضوح تصویری (در این حالت ما فرمت .png ذخیره میکنیم، بنابراین این بدان معنی است که ما با وضوح ۳۰۰ نقطه در هر اینچ ذخیره میکنیم. سایر فرمتهای پرونده ممکن که میتوانید ذخیره کنید .ps ،pdf هستند. و .svg که همگی قالبهای گرافیکی برداری هستند، در این صورت نیازی به تعیین مقدار dpi نیستید)transparent
: هر شکلی را شفاف کنید.bbox_inches
: جعبه محدود کننده اطراف شکل را مشخص میکند (تضمین میکند که فضای خالی دیگری در اطراف شکل وجود نداشته باشد)
برای مشاهده طرح آخر خود در یک پنجره شکل ، باید پس از ذخیره شکل ، یک دستور plt.show()
اضافه کنیم.
ما با موفقیت با استفاده از پایتون طرح کیفیت انتشار را ایجاد کردیم! این مثال و همه نمونه های بعدی بصورت آنلاین در این مخزن Github بصورت آنلاین در دسترس خواهد بود.
برای یادگیری دورههای پایتون میتوانید در سایتهای datacamp و codecademy ثبت نام کنید و برای پرداخت هزینهی ارزی از خدمات خرید با پی پال و خرید با ویزا کارت سایت اول پرداخت استفاده کنید.
نظرات کاربران