প্লট টিক্স সংখ্যা হ্রাস


160

আমার গ্রাফটিতে আমার অনেকগুলি টিক্স আছে এবং তারা একে অপরের সাথে চলছে।

আমি কীভাবে টিকিটের সংখ্যা হ্রাস করতে পারি?

উদাহরণস্বরূপ, আমার টিক্স আছে:

1E-6, 1E-5, 1E-4, ... 1E6, 1E7

এবং আমি কেবল চাই:

1E-5, 1E-3, ... 1E5, 1E7

আমি এর সাথে খেলার চেষ্টা করেছি LogLocator, তবে আমি এটি বের করতে সক্ষম হইনি।

উত্তর:


266

বিকল্পভাবে, আপনি যদি ম্যাটপ্ল্লোলিবকে (বর্তমানে কেবলমাত্র সাথে MaxNLocator) তাদের অবস্থানের অনুমতি দেওয়ার সময় টিকের সংখ্যা নির্ধারণ করতে চান তবে রয়েছে pyplot.locator_params,

pyplot.locator_params(nbins=4)

আপনি নীচে উল্লিখিত হিসাবে এই পদ্ধতিতে নির্দিষ্ট অক্ষ নির্দিষ্ট করতে পারেন, ডিফল্ট উভয়:

# To specify the number of ticks on both or any single axes
pyplot.locator_params(axis='y', nbins=6)
pyplot.locator_params(axis='x', nbins=10)

27
এটি একটি দুর্দান্ত পরামর্শ ছিল, এছাড়াও নির্দিষ্ট করতে pyplot.locator_params(axis = 'x', nbins = 4)(বা axis = 'y') প্রক্রিয়াটিকে সত্যই সোজা করে তুলেছে। ধন্যবাদ @ বিগামারী!
বেনজমিনগ্রোগ

8
লগ স্কেল সহ, এটি numticksপরিবর্তে কাজ করেছিলnbins
মেডুজ

1
@ বিগামারী, আপনি কি দয়া করে numticksলগারিদমিক প্লটগুলির সমাধান যোগ করতে পারেন @ মেদুজ দ্বারা নির্দেশিত হিসাবে?
লাইটেন

7
এটি লেবেলগুলি কোথায় থাকা উচিত তা মনে হচ্ছে না। উদাহরণস্বরূপ, যদি মূল টিক লেবেলগুলি [0, 1, ..., 99]এবং এখন একটি সেট থাকে nticks=10, তবে নতুন স্পারস লেবেলগুলি অক্ষ বরাবর দশগুণ দূরে স্থাপন করা হবে, অর্থাৎ এখন 1বসবে যেখানে 9ছিল, 2কোথায় 19ছিল ... এবং 9কোথায় 99ছিল।
ভিম

2
এই পদ্ধতিতে বিশ্বাস করার আগে আপনার ফলাফলগুলি পরীক্ষা করুন। @ ভিমটি সঠিক। টিক মানগুলি ভুলভাবে স্থাপন করা হবে।
ডেভিড জে।

53

যদি এখনও অনুসন্ধানের ফলাফলগুলিতে কেউ এই পৃষ্ঠাটি পান:

fig, ax = plt.subplots()

plt.plot(...)

every_nth = 4
for n, label in enumerate(ax.xaxis.get_ticklabels()):
    if n % every_nth != 0:
        label.set_visible(False)

7
এটি বাস্তবে অন্যান্য সমস্ত উত্তর বনাম কাজ করেছিল যা কিছুই করেনি। ধন্যবাদ :)
ফাইজান

সাবাশ. এটি খুঁজে পেতে আমার কিছুটা সময় লেগেছে তবে এটি যা চেয়েছিল তা করেছে।
জন

আপনাকে ধন্যবাদ, এটি নিশ্চিত করে যে লেবেলগুলি কী রয়েছে তা সঠিক অবস্থানে রয়েছে। এই উত্তরটির উন্নতি করতে পারে এমন একটি অতিরিক্ত পদক্ষেপ হ'ল টিক চিহ্নটিও সরিয়ে ফেলা।
ডেভিড জে।

দুর্দান্ত সহজ উত্তর - কোনও সম্প্রদায়কে পরিচিত কোনও কাস্টম পদ্ধতি অবাক করে দেয়। এই lib একটি মূল্যবান সংযোজন হবে?
জ্যাবারওয়কি

32

টিক্সের কাস্টমাইজেশন এবং উপস্থিতির সমস্যা সমাধানের জন্য ম্যাটপ্ল্লিটিব ওয়েবসাইটে টিক লোকেটার গাইড দেখুন

ax.xaxis.set_major_locator(plt.MaxNLocator(3))

এক্স-অক্ষের টিকের মোট সংখ্যা 3 এ সেট করে এবং এটি অক্ষরেখাতে সমানভাবে বিতরণ করবে।

এটি সম্পর্কে একটি দুর্দান্ত টিউটোরিয়ালও রয়েছে


শুধুমাত্র প্রথম 3 ডেটটাইম সূচক নির্বাচন করুন। যখন pandas.DataFrame.plot থেকে কুঠার পেতে ax = df.plot()
Mithril

@ মিথিল দুঃখিত আমি আপনার মন্তব্যটি বেশ বুঝতে পারছি না। আপনি দয়া করে বিস্তারিত বলতে পারেন?
প্রজেথ জয়থিসা

pandas.DataFrameডেটটাইম ইনডেক্সের সাথে আমার যদি ডেফ ( ) থাকে [2019-01-01, ... 2019-11-01], কল করুন ax = df.plot(), ফিগার অবজেক্টটি ফিরিয়ে দিন। কল ax.xaxis.set_major_locator(plt.MaxNLocator(3)) কেবল প্রথম 3 সূচক দেখায় [2019-01-01, 2019-01-02, 2019-01-03]।
মিথিল

1
@ মিথিল, df.plot()প্রায়শই প্রদর্শন করে minor_locator, যাতে আপনি চেষ্টা করতে পারেন ax1.xaxis.set_minor_locator(plt.MaxNLocator(3))3আপনি যে টিক্স প্রদর্শন করতে চান তার জন্য বিকল্পটি মনে রাখবেন । পান্ডাস টাইমসারিজের জন্য আমি প্রস্তাব দিয়েছি import matplotlib.dates as mdatesএবং ax.xaxis.set_minor_locator(mdates.MonthLocator(interval = 1))সাথে ax.xaxis.set_minor_formatter(mdates.DateFormatter('%m-%Y'))
চালাচ্ছি

20

set_ticks()অক্ষ অবজেক্টের জন্য একটি ফাংশন রয়েছে।


4
আমি কী টিক্স চাই তা আগে জানতাম এটি কাজ করবে। আমি উপরে যে উদাহরণ দিয়েছি তা কেবল একটি উদাহরণ ছিল। টিক্সগুলি কী তা আমি জানি না, আমি কেবল জানি আমি তাদের মধ্যে কম, অর্থাৎ প্রত্যেকটিই চাই।
jlconlin

10
আপনি অক্ষের বস্তুর জন্য কল করতে পারেন get_xticks()বা get_yticks()প্রথমে প্রয়োজন অনুযায়ী সম্পাদনা করতে পারেন এবং তারপরে তালিকাটি আবার পাস করতে পারেন set_ticks()
ব্যবহারকারী 812786

4
আমার নেই set_ticks(), তবে আমার আছে set_xticks()এবং আছে set_yticks()। এগুলি অক্ষ নয়, অক্ষ অক্ষরের বৈশিষ্ট্য। গত কয়েক বছর ধরে এটি পরিবর্তিত হতে পারে।
গৌথির

2
আমার নিশ্চিত হওয়া উচিত না, কিছু লোক আপনার উত্তরটিকে ঠিক তেমন কার্যকর বলে খুঁজে পেয়েছে, এবং কারণ এটি আমার পক্ষে পৃথক, তার অর্থ এই নয় যে এটি সবার জন্য।
গৌথির

1
একটি উত্তর এই উত্তরটি কার্যকর করার দিকে অনেক এগিয়ে যাবে।
রিচার্ড

10

যদি কারও এখনও এটির প্রয়োজন হয় এবং যেহেতু এখানে কিছুই সত্যই আমার পক্ষে কাজ করেনি, আমি খুব সহজ উপায় নিয়ে এসেছি যা উত্পন্ন প্লটটির উপস্থিতি "যেমন" রাখে ঠিক তেমন টিকেটের সংখ্যা ঠিক করার সময়:

import numpy as np
import matplotlib.pyplot as plt

f, ax = plt.subplots()
ax.plot(range(100))

ymin, ymax = ax.get_ylim()
ax.set_yticks(np.round(np.linspace(ymin, ymax, N), 2))

2
ax.set_yticks(np.linspace(int(ymin), int(ymax), N), 2)
ভাসমানের

@ নিকসেটজি এখনও আমার সাথে ভাসছে!
মোহাম্মদ

4

@ ইরফেল প্রদত্ত সমাধানটি সোজা এবং বেশ সহায়ক।

তবুও প্রদর্শিত টিক লেবেলগুলি মূল বিতরণ থেকে নমুনা হিসাবে আসবে না তবে ফিরে আসা অ্যারের সূচকগুলি থেকে np.linspace(ymin, ymax, N)

আপনার মূল টিক লেবেল থেকে সমানভাবে ব্যবধানযুক্ত N মানগুলি প্রদর্শন করতে, set_yticklabels()পদ্ধতিটি ব্যবহার করুন । পূর্ণসংখ্যা লেবেল সহ y অক্ষের জন্য এখানে একটি স্নিপেট রয়েছে:

import numpy as np
import matplotlib.pyplot as plt

ax = plt.gca()

ymin, ymax = ax.get_ylim()
custom_ticks = np.linspace(ymin, ymax, N, dtype=int)
ax.set_yticks(custom_ticks)
ax.set_yticklabels(custom_ticks)

এই সুন্দর টুইটের জন্য কুডোস!
মোহাম্মদ

2

লগ স্কেল ব্যবহার করা হলে নিম্নলিখিত কমান্ডের সাহায্যে বড় টিক্সের সংখ্যা ঠিক করা যায়

import matplotlib.pyplot as plt

....

plt.locator_params(numticks=12)
plt.show()

numticksঅক্ষর টিকের সংখ্যাটি প্রদর্শিত হবে তা নির্ধারণ করতে মান সেট ।

locator_params()ফাংশনটি প্রবর্তন করার জন্য @ বিগামারী পোস্টে ক্রেডিট nticksদেয় তবে লগ স্কেল ব্যবহার করার সময় প্যারামিটারটি ত্রুটি ছুড়ে দেয়।


প্রশ্নোত্তর পূর্ববর্তী ম্যাটপ্ল্লোলিবের জন্য, অর্থাৎ ১, এবং আপনি ২ টি উল্লেখ করছেন
দাউদ লাসজুক ১
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.