البرمجة

Darken Colors in Matplotlib

للأسف، لا يوجد وظيفة مدمجة في مكتبة Matplotlib تقوم بتغيير سطوع اللون مباشرة. ومع ذلك، يمكنك تحقيق هذا الهدف بطرق مختلفة، مثل تحويل اللون إلى فضاء الألوان HSL وتعديل قيمة السطوع، ثم تحويله مرة أخرى إلى RGB. لنرى كيف يمكن تنفيذ ذلك:

python
import matplotlib.pyplot as plt import colorsys def darken_color(color, factor): if isinstance(color, str): color = color.lstrip('#') rgb = tuple(int(color[i:i+2], 16) for i in (0, 2, 4)) elif isinstance(color, tuple): rgb = color else: raise ValueError("Unsupported color format") h, l, s = colorsys.rgb_to_hls(*[x / 255.0 for x in rgb]) l = max(min(l * factor, 1.0), 0.0) r, g, b = colorsys.hls_to_rgb(h, l, s) return (r * 255, g * 255, b * 255) # Example usage color = '#05FA2B' darkened_color = darken_color(color, 0.5) print(darkened_color) plt.figure(figsize=(1, 1)) plt.gca().set_facecolor(darkened_color) plt.show()

هذا الكود يأخذ لونًا ويظلله بناءً على العامل المعطى، ثم يستخدم اللون المظلل لرسم خلفية في رسم بياني باستخدام matplotlib. تذكر أنه قد يكون هناك طرق أخرى لتحقيق نفس الهدف، ولكن هذا هو أحدها.

المزيد من المعلومات

بالطبع! يمكنك تحسين وظيفة darken_color لتتعامل مع مجموعة أوسع من صيغ الألوان ولتكون أكثر قابلية للتعديل. على سبيل المثال، يمكنك تحسينها لتدعم أنواع الألوان المختلفة، مثل rgb، rgba، والأسماء القياسية للألوان. هناك أيضًا فرصة لتحسين أداء الكود عن طريق تحويل الألوان مرة واحدة فقط إلى فضاء HSL بدلاً من تحويلها في كل مرة.

إليك نسخة محسنة من الوظيفة:

python
import matplotlib.colors as mcolors import colorsys def darken_color(color, factor): """Darken the given color by a factor (0 to 1)""" try: rgb = mcolors.hex2color(color) except ValueError: try: rgb = mcolors.to_rgba(color)[:3] except ValueError: raise ValueError("Invalid color format") h, l, s = colorsys.rgb_to_hls(*rgb) l = max(min(l * factor, 1.0), 0.0) return colorsys.hls_to_rgb(h, l, s) # Example usage color = '#05FA2B' darkened_color = darken_color(color, 0.5) print(darkened_color) plt.figure(figsize=(1, 1)) plt.gca().set_facecolor(darkened_color) plt.show()

تحسين الكود بهذه الطريقة يجعله أكثر مرونة وقابلية للاستخدام مع مجموعة متنوعة من أنماط الألوان.

زر الذهاب إلى الأعلى