آموزش

نقشه‌های رنگی Matplotlib: شخصی‌سازی ترکیب‌های رنگی‌ت

Enhance your visualizations with Matplotlib colormaps. Learn to pick the right colormap, adjust color classes, and troubleshoot common visualization issues.

تاریخ انتشار:
11 خرداد 1405
پایتون
6 دقیقه
مصورسازی داده
تحلیل داده
کاربرهای فینکا در چه شرکت‌هایی مشغول به کار هستند؟

مصورسازی داده‌ها یکی از بهترین راه‌ها (اگر نگیم بهترین راه) برای تحلیل‌گرهای داده و دانشمندهای داده است تا اطلاعات پیچیده رو نشون بدن و بینش‌های معنی‌داری ایجاد کنن. برای اینکه بتونی بیشترین بهره رو از فرصتت برای ارتباط با ذی‌نفع‌ها ببری، اطلاعات مفیدی درباره نقشه‌های رنگی Matplotlib برات جمع‌آوری کردم.

همونطور که در این مقاله می‌بینی، Matplotlib یک کتابخونه مصورسازی بسیار همه‌کاره و قابل توسعه در پایتونه. این کتابخونه هر گزینه‌ای رو، از نمودارهای ساده گرفته تا تصاویر کاملا تعاملی، ارائه می‌ده. اگر به‌طور کلی با پایتون آشنا نیستی، پیشنهاد می‌کنم قبل از شروع، در دوره مقدمه‌ای بر پایتون فینکا ثبت‌نام کنی تا پایه‌هاش رو درک کنی. خود من هم همیشه تقلب‌نامه پایتون رو در دسترسم نگه می‌دارم ‍چون مرجع مفیدی برای توابع رایجه.

انتخاب نقشه رنگی مناسب در Matplotlib

یکی از اولین چیزهایی که باید در نظر بگیری اینه که بین نقشه‌های رنگی ترتیبی (sequential)، واگرا (diverging) یا دسته‌ای (categorical) تصمیم بگیری. فاکتورهای مهم دیگه برای انتخاب نقشه رنگی شامل یکنواختی ادراکی (به این معنی که تفاوت‌های مساوی در مقادیر داده به عنوان تفاوت‌های مساوی در رنگ درک بشن) و استفاده از گزینه‌های مناسب برای افراد کوررنگه تا تصاویرت برای همه مخاطب‌ها قابل دسترس باشه.

همچنین موقع انتخاب نقشه رنگی باید استانداردهای حوزه‌های مختلف رو هم در نظر بگیری. مثلا، در مطالعات اقیانوس‌شناسی، سایه‌های مختلف آبی نشون‌دهنده عمق‌های مختلف آبه. اگر درباره نقشه رنگی مناسب برای مصورسازی‌ت مطمئن نیستی، ابزارها و منابع مختلفی برای راهنمایی وجود دارن. به‌طور خاص، دوره مقدمه‌ای بر مصورسازی داده‌ها با Matplotlib در فینکا بهت کمک می‌کنه تا سناریوهای مختلفی رو تمرین کنی.

نقشه‌های رنگی مختلف در Matplotlib

در پایتون، ماژول matplotlib.colormaps بهت امکان دسترسی به نقشه‌های رنگی داخلی رو می‌ده که کمک می‌کنه بهترین ترکیب رو برای پروژه‌ت انتخاب کنی. رایج‌ترین دسته‌بندی گزینه‌ها به این صورته:

نقشه‌های رنگی ترتیبی

نقشه‌های رنگی ترتیبی داده‌های مرتب‌شده‌ای رو نشون می‌دن که از مقادیر کم به زیاد پیش می‌رن. این نقشه‌ها از رنگ‌های روشن به تیره تغییر می‌کنن و اندازه داده‌ها رو در سطوح مختلف نشون می‌دن. یک مثال از نقشه رنگی ترتیبی در هیت‌مپ برای داده‌های دماست، که رنگ‌های روشن‌تر نشون‌دهنده دماهای خنک‌تر و سایه‌های تیره‌تر نشون‌دهنده دماهای گرم‌تر هستن.

فرض کن یک مجموعه داده با ستون‌های تاریخ و دما داری. کد زیر یک هیت‌مپ برای دما ایجاد می‌کنه.

نقشه‌های رنگی واگرا

نقشه‌های رنگی واگرا داده‌هایی رو که انحرافاتی از یک مقدار مرکزی در هر دو جهت دارن، برجسته می‌کنن. نقشه‌های رنگی واگرا رنگ‌های متضادی برای جهت‌های مثبت و منفی دارن. یک کاربرد رایج از این نقشه‌ها در داده‌های مالیه تا سود و زیان رو نشون بدن.

نقشه‌های رنگی چرخه‌ای (Cyclic)

نقشه‌های رنگی چرخه‌ای برای مصورسازی داده‌هایی که یک الگوی تکرارشونده یا چرخه‌ای رو نشون می‌دن (مثل زاویه‌ها، فازهای موج یا زمان روز) مفیدن. یک مثال از این نقشه‌ها در عمل، مصورسازی فازهای یک تابع تناوبیه، مثل یک موج سینوسی.

نقشه‌های رنگی کیفی

نقشه‌های رنگی کیفی برای نشون دادن داده‌های دسته‌ای که هیچ ترتیب خاصی ندارن، ایده‌آل هستن. یک کاربرد رایج برای نقشه‌های رنگی کیفی در نمودار دایره‌ایه، جایی که هر بخش نشون‌دهنده یک دسته متفاوته و می‌شه به‌راحتی اون‌ها رو از هم تشخیص داد.

نقشه‌های رنگی رنگین‌کمانی

نقشه‌های رنگی رنگین‌کمانی مثل hsv زمانی استفاده می‌شن که به طیف وسیعی از رنگ‌ها نیاز باشه.

نقشه‌های رنگی یکنواخت ادراکی

نقشه‌های رنگی مثل inferno و plasma دید بهتری رو در رسانه‌های نمایشی مختلف ارائه می‌دن.

ایجاد و تغییر نقشه‌های رنگی در Matplotlib

با این که Matplotlib طیف وسیعی از نقشه‌های رنگی داخلی داره، سناریوهایی وجود دارن که در اون‌ها می‌خوای رنگ‌هات رو شخصی‌سازی کنی. ابزارهای کلیدی برای ایجاد نقشه‌های رنگی سفارشی در Matplotlib توابع ListedColormap و LinearSegmentedColormap هستن.

ایجاد نقشه رنگی سفارشی با ListedColormap

تابع ListedColormap بهت اجازه می‌ده یک نقشه رنگی از یک لیست از رنگ‌های خاص ایجاد کنی. این روش زمانی مفیده که می‌خوای رنگ‌های خاصی رو به دسته‌های متمایز در داده‌های دسته‌ای اختصاص بدی.

ایجاد نقشه رنگی سفارشی با LinearSegmentedColormap

تابع LinearSegmentedColormap بهت اجازه می‌ده نقشه‌های رنگی ایجاد کنی که به‌آرومی بین رنگ‌ها تغییر می‌کنن. دونستن این موضوع ارزشمنده چون داده‌های پیوسته معمولا به تغییرات رنگ تدریجی (gradient) نیاز دارن. در اینجا من تعداد بازه‌هایی رو هم که برای مصورسازیم می‌خوام، مشخص می‌کنم.

شخصی‌سازی بازه‌ها و شدت رنگ

می‌تونی شدت یا بازه رنگ‌ها رو در یک نقشه رنگی موجود با دستکاری نرمال‌سازی (normalization) یا برش (slicing) اون برای استفاده از یک زیرمجموعه از رنگ‌های در دسترس، کنترل کنی. در مثال زیر، بازه‌های رنگی طوری برش داده شدن که دماهای بین 16 تا 40 درجه سانتی‌گراد رو نشون بدن.

ترکیب نقشه‌های رنگی موجود

همچنین می‌تونی نقشه‌های رنگی موجود رو با هم ترکیب کنی تا تصاویر پیچیده‌تری بسازی.

معکوس کردن نقشه‌های رنگی با پسوند _r

می‌تونی هر نقشه رنگی در Matplotlib رو با اضافه کردن پسوند _r به انتهای اسمش معکوس کنی.

رسیدگی به خطاهای رایج در نقشه‌های رنگی Matplotlib

موقع کار با نقشه‌های رنگی در Matplotlib ممکنه با خطاهایی مواجه بشی که روی جریان کارت تاثیر می‌ذارن. در ادامه بعضی از این خطاها و نحوه رفع اون‌ها آورده شده.

خطای AttributeError: module 'matplotlib' has no attribute 'colormaps'

این خطا زمانی رخ می‌ده که از نسخه‌های قبل از 3.4.0 در Matplotlib برای دسترسی به matplotlib.colormaps استفاده می‌کنی. ویژگی colormaps در Matplotlib نسخه 3.4.0 معرفی شد. اول نسخه Matplotlib خودت رو با استفاده از کد زیر بررسی کن تا این خطا رو برطرف کنی.

با استفاده از دستور pip زیر، کتابخونه رو ارتقا بده.

اگر در ارتقای نسخه Matplotlib مشکل داری، روش زیر رو برای دسترسی به نقشه‌های رنگی امتحان کن.

اختصاص رنگ نادرست

ممکنه وقتی مقداری خارج از بازه مورد انتظار پاس می‌دی یا وقتی نقشه رنگی به‌درستی اعمال نمی‌شه، با تخصیص رنگ نادرست مواجه بشی. این مشکل همچنین ممکنه زمانی پیش بیاد که نقشه رنگی برای داده‌های پیوسته در نظر گرفته شده اما روی داده‌های دسته‌ای اعمال بشه، یا برعکس.

برای اطمینان از اینکه داده‌هات در بازه مورد انتظار قرار دارن، همیشه اون‌ها رو با استفاده از پارامترهای vmax و vmin نرمال‌سازی یا مقیاس‌بندی کن.

برای کنترل دقیق‌تر، می‌تونی با استفاده از پارامترهای boundaries یا norm در توابع رسم نمودار، مرزهای رنگ رو به‌طور صریح تعریف کنی.

نقص‌های بصری و نتایج غیرمنتظره

موقع کار با داده‌های گسسته یا با رزولوشن پایین، ممکنه باندهای رنگی ناخواسته، کنتراست بیش از حد، یا تداخل رنگی رو تجربه کنی. این مشکل زمانی رخ می‌ده که داده‌هات بازه محدودی دارن اما با یک نقشه رنگی پیوسته نمایش داده می‌شن.

برای حل این مشکل، از نقاط داده بیشتری استفاده کن یا تعداد سطوح رنگی رو تنظیم کن تا انتقال‌ها رو نرم‌تر کنی.

می‌تونی در صورت لزوم نقشه رنگی رو به سطوح ثابت تقسیم کنی تا با داده‌های گسسته کار کنی.

همچنین می‌تونی تنظیمات نمایش رو بررسی کنی و رزولوشن رو به‌ویژه زمان ذخیره تصاویر تنظیم کنی تا از نمودارهای با رزولوشن پایین جلوگیری کنی.

اعوجاج رنگی به دلیل برش

اعوجاج رنگی زمانی رخ می‌ده که داده‌ها شامل مقادیر شدیدی خارج از بازه رنگ مورد انتظار باشن. این باعث می‌شه بخش‌هایی از داده‌ها بریده بشن و حداقل یا حداکثر رنگ نقشه رنگی به اون‌ها اختصاص داده بشه.

برای جلوگیری از اعوجاج رنگی، محدودیت‌های رنگ رو با استفاده از vmin و vmax تنظیم کن تا با بازه داده‌هات مطابقت داشته باشن و از برش جلوگیری بشه.

همچنین بهتره از مقیاس‌بندی مقاوم (robust scaling) برای رسیدگی به داده‌های پرت استفاده کنی و مرزهای سفارشی تنظیم کنی تا مقادیر خیلی بزرگ یا کوچک کنار گذاشته بشن.

نمایش نادرست نقشه رنگی در نمودارهای سه‌بعدی

اگر مشکلی در نحوه نگاشت داده‌ها در سطح سه‌بعدی وجود داشته باشه، ممکنه نقشه‌های رنگی در مصورسازی‌های سه‌بعدی به‌درستی نمایش داده نشن. برای حل این مشکل، مطمئن شو که داده‌های محور Z نرمال‌سازی شدن تا در بازه مورد انتظار نقشه رنگی قرار بگیرن. همچنین از محدوده‌های مناسب نقشه رنگی استفاده کن تا تمام بازه مقادیر محور Z رو در بر بگیره.

نتیجه‌گیری

انتخاب نقشه رنگی مناسب یک مرحله مهمه چون تاثیر زیادی روی نحوه درک و مشاهده داده‌هات توسط کاربرها داره. به نظر من، این که وقت زیادی رو برای تحلیل داده‌ها صرف کنی اما در مرحله آخر که قراره نتایجت رو به اشتراک بذاری بی‌دقت باشی، اشتباه بزرگیه.

خوشبختانه، Matplotlib گزینه‌های زیادی رو در اختیارت می‌ذاره تا مطمئن بشی تصاویرت یک داستان جذاب رو روایت می‌کنن. در دوره ما، مقدمه‌ای بر مصورسازی داده‌ها با Matplotlib (در سایت فینکا)، ثبت‌نام کن تا تبدیل به یک متخصص بشی. همچنین، اگر یک کاربر پایتون هستی که از Seaborn هم برای مصورسازی استفاده می‌کنه (دونستن هر دو عالیه)، مقاله راهنمای سریع انتخاب رنگ در Seaborn رو بخون و بعد از اون دوره مقدمه‌ای بر مصورسازی داده‌ها با Seaborn ما رو دنبال کن.

اشتراک‌گذاری
فهرست مطالب
  • انتخاب نقشه رنگی مناسب در Matplotlib
  • نقشه‌های رنگی مختلف در Matplotlib
  • ایجاد و تغییر نقشه‌های رنگی در Matplotlib
  • رسیدگی به خطاهای رایج در نقشه‌های رنگی Matplotlib
  • نتیجه‌گیری

سوالات متداول

نقشه رنگی پیش‌فرض در Matplotlib نقشه رنگی viridis هست.

برای رفع خطای AttributeError: module 'matplotlib' has no attribute 'colormaps'، کتابخونه Matplotlib خودت رو به نسخه‌ای جدیدتر از نسخه 3.4.0 ارتقا بده.

می‌تونی دسترس‌پذیری نقشه رنگی رو برای کاربرهای کوررنگ با استفاده از ابزارهایی مثل Coblis (شبیه‌ساز کوررنگی) یا کتابخونه‌های شخص ثالث مثل palettable تست کنی تا ببینی این نقشه‌ها برای بیننده‌های کوررنگ چطور به نظر می‌رسن.

یک نقشه رنگی یکنواخت ادراکی تضمین می‌کنه که گام‌های مساوی در داده‌ها باعث تغییرات ادراکی مساوی در رنگ می‌شه، که این امکان رو برای تفسیر دقیق مصورسازی فراهم می‌کنه.

بله، کتابخونه‌های خارجی مثل palettable یا cmocean نقشه‌های رنگی سفارشی ارائه می‌دن که می‌تونن برای نیازهای خاص مصورسازی با Matplotlib ادغام بشن.

دریافت اپلیکیشن فینکا

با اپلیکیشن فینکا، به بیشتر دوره‌ها و مسیرها روی موبایل دسترسی دارید، تمرین می‌کنید و یادگیری رو هم‌زمان روی موبایل و دسکتاپ ادامه می‌دید.