للأسف، لا يوجد وظيفة مدمجة في مكتبة Matplotlib تقوم بتغيير سطوع اللون مباشرة. ومع ذلك، يمكنك تحقيق هذا الهدف بطرق مختلفة، مثل تحويل اللون إلى فضاء الألوان HSL وتعديل قيمة السطوع، ثم تحويله مرة أخرى إلى RGB. لنرى كيف يمكن تنفيذ ذلك:
pythonimport 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 بدلاً من تحويلها في كل مرة.
إليك نسخة محسنة من الوظيفة:
pythonimport 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()
تحسين الكود بهذه الطريقة يجعله أكثر مرونة وقابلية للاستخدام مع مجموعة متنوعة من أنماط الألوان.