python - tutorial - matplotlib شرح




تغيير "تردد القراد" على محور س أو ص في matplotlib؟ (6)

أنا أحب هذا الحل (من كتاب الطبخ Matplotlib Plotting ):

import matplotlib.pyplot as plt
import matplotlib.ticker as ticker

x = [0,5,9,10,15]
y = [0,1,2,3,4]

tick_spacing = 1

fig, ax = plt.subplots(1,1)
ax.plot(x,y)
ax.xaxis.set_major_locator(ticker.MultipleLocator(tick_spacing))
plt.show()

يمنحك هذا الحل تحكمًا صريحًا في تباعد القراد عبر الرقم المعطى إلى ticker.MultipleLocater() ، يسمح بتحديد الحد التلقائي ، ويسهل قراءته فيما بعد.

أحاول إصلاح كيفية قيام بيثون بتخطيط بياناتي.

قل

x = [0,5,9,10,15]

و

y = [0,1,2,3,4]

ثم سأفعل:

matplotlib.pyplot.plot(x,y)
matplotlib.pyplot.show()

يتم رسم القراد محور x في فواصل من 5. هل هناك طريقة لجعلها تظهر فترات من 1؟


أنا وضعت حل غير لائق. ضع في اعتبارك أن لدينا المحور X وكذلك قائمة بالعلامات لكل نقطة في X.

مثال:
import matplotlib.pyplot as plt

x = [0,1,2,3,4,5]
y = [10,20,15,18,7,19]
xlabels = ['jan','feb','mar','apr','may','jun']
لنفترض أنني أريد عرض علامات التجزئة فقط على "feb" و "jun"
xlabelsnew = []
for i in xlabels:
    if i not in ['feb','jun']:
        i = ' '
        xlabelsnew.append(i)
    else:
        xlabelsnew.append(i)
جيد ، الآن لدينا قائمة مزيفة من العلامات. أولاً ، رسمنا النسخة الأصلية.
plt.plot(x,y)
plt.xticks(range(0,len(x)),xlabels,rotation=45)
plt.show()
الآن ، الإصدار المعدل.
plt.plot(x,y)
plt.xticks(range(0,len(x)),xlabelsnew,rotation=45)
plt.show()

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

ax.set_xticks(ax.get_xticks()[::2])

هذا موضوع قديم ، لكنني أتعثر في هذا الوقت بين الحين والآخر وأجري هذه الوظيفة. انها مريحة للغاية:

import matplotlib.pyplot as pp
import numpy as np

def resadjust(ax, xres=None, yres=None):
    """
    Send in an axis and I fix the resolution as desired.
    """

    if xres:
        start, stop = ax.get_xlim()
        ticks = np.arange(start, stop + xres, xres)
        ax.set_xticks(ticks)
    if yres:
        start, stop = ax.get_ylim()
        ticks = np.arange(start, stop + yres, yres)
        ax.set_yticks(ticks)

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

gca().set_ylim(top=new_top) # for example

وتشغيل وظيفة resadjust مرة أخرى.


هناك طريقة أخرى تتمثل في تعيين محدد المحور:

import matplotlib.ticker as plticker

loc = plticker.MultipleLocator(base=1.0) # this locator puts ticks at regular intervals
ax.xaxis.set_major_locator(loc)

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


يمكنك تحديد المكان الذي تريد وضع علامة فيه بشكل صريح على plt.xticks :

plt.xticks(np.arange(min(x), max(x)+1, 1.0))

فمثلا،

import numpy as np
import matplotlib.pyplot as plt

x = [0,5,9,10,15]
y = [0,1,2,3,4]
plt.plot(x,y)
plt.xticks(np.arange(min(x), max(x)+1, 1.0))
plt.show()

(تم استخدام np.arange بدلاً من وظيفة range Python فقط في حالة min(x) و max(x) هي عوامات بدلاً من ints.)

تقوم plt.plot (أو ax.plot ) بتعيين حدود x و y الافتراضية تلقائيًا. إذا كنت ترغب في الإبقاء على هذه الحدود ، وقم فقط بتغيير الخطوات الخاصة بعلامات التأشير ، فيمكنك استخدام ax.get_xlim() لاكتشاف الحدود التي حددتها بالفعل Matplotlib.

start, end = ax.get_xlim()
ax.xaxis.set_ticks(np.arange(start, end, stepsize))

يجب على مُنسِّق العلامة الافتراضي أن يقوم بعمل لائق لتقريب قيم التجزئة إلى عدد معقول من الأرقام المهمة. ومع ذلك ، إذا كنت ترغب في الحصول على مزيد من التحكم في التنسيق ، يمكنك تحديد المنسق الخاص بك. فمثلا،

ax.xaxis.set_major_formatter(ticker.FormatStrFormatter('%0.1f'))

إليك مثال على runnable:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker

x = [0,5,9,10,15]
y = [0,1,2,3,4]
fig, ax = plt.subplots()
ax.plot(x,y)
start, end = ax.get_xlim()
ax.xaxis.set_ticks(np.arange(start, end, 0.712123))
ax.xaxis.set_major_formatter(ticker.FormatStrFormatter('%0.1f'))
plt.show()






matplotlib