python - tutorial - matplotlib شرح




تنسيق التسمية محور matplotlib (2)

هنالك عدة طرق لعمل هذا

يمكنك فقط تعديل حدود الطاقة (doc)

ax1.xaxis.get_major_formatter().set_powerlimits((0, 1))

تعيين القوى حيث ScalerFormatter تبديل ScalerFormatter إلى التدوين العلمي

أو يمكنك استخدام FuncFormatter الذي يمنحك قدرًا كبيرًا من التحكم (ولكن يمكنك التخلص من قدمك).

from matplotlib import ticker

scale_pow = 2
def my_formatter_fun(x, p):
    return "%.2f" % (x * (10 ** scale_pow))
ax1.get_xaxis().set_major_formatter(ticker.FuncFormatter(my_formatter_fun))
ax1.set_xlabel('my label ' + '$10^{{{0:d}}}$'.format(scale_pow))

FuncFormatter (doc) دالة وسيطة 2 تقوم بإرجاع سلسلة ويستخدم هذه الدالة لتنسيق التسمية. (كن على علم ، سيؤدي ذلك أيضًا إلى تغيير كيفية عرض القيم في زاوية الأرقام التفاعلية). الوسيطة الثانية هي "position" وهي عبارة عن وسيطة يتم تسليمها عندما يقوم المنسق بتصنيفها. يمكنك تجاهلها بأمان ، ولكن يجب أن تأخذها (من الحكمة الأخرى سوف تحصل على أخطاء من عدد غير صحيح من الحجج). هذا هو نتيجة لواجهة برمجة التطبيقات الموحدة لجميع الصيغ واستخدام المنسق لعرض موقع الماوس في التفاعلية.

أواجه مشكلة في تنسيق علامات التجزئة للمحور. لقد عطلت الإزاحة من y_axis:

ax1.ticklabel_format(style = 'sci', useOffset=False)

وحاولت وضعه على شكل علمي ولكن كل ما أحصل عليه هو:

0.00355872

لكن كنت أتوقع شيئًا مثل:

3.55872...E-2

أو مشابه.

ما أريده حقًا هو شيء مثل:

3.55872... (on the tick label)
x 10^2  (or something similar - on the axis label)

يمكنني محاولة وضع العلامات على أنها ثابتة ، ولكن في النهاية سيكون لدي بضع عشرات أو مئات من المؤامرات ذات القيم المختلفة ، لذا يجب أن يتم ضبطها بشكل ديناميكي.

بديل سيكون وضع y_axis تعويض التسمية ، ولكن ليس لدي أي فكرة عن كيفية القيام بذلك.


يجب أيضًا تحديد حدود المحور والعتبة:

ax1.ticklabel_format(axis='y', style='sci', scilimits=(-2,2))

سيستخدم هذا تنسيق sci على المحور y عندما تكون الأرقام خارج الحدود [0.01, 99] .





matplotlib