Matplotlib () গ্রাফ অক্ষের উপর মান পরিবর্তন করুন


90

বলুন আমার কাছে কিছু ইনপুট ডেটা রয়েছে:

data = np.random.normal(loc=100,scale=10,size=(500,1,32))
hist = np.ones((32,20)) # initialise hist
for z in range(32):
    hist[z],edges = np.histogram(data[:,0,z],bins=np.arange(80,122,2))

আমি এটি ব্যবহার করে চক্রান্ত করতে পারি imshow():

plt.imshow(hist,cmap='Reds')

পেয়ে:

এখানে চিত্র বর্ণনা লিখুন

তবে এক্স অক্ষের মানগুলি ইনপুট ডেটার সাথে মেলে না (অর্থাত 100 এর গড়, 80 থেকে 122 অবধি)। অতএব, আমি মানগুলি দেখানোর জন্য এক্স-অক্ষটি পরিবর্তন করতে চাই edges

আমি চেষ্টা করেছি:

ax = plt.gca()
ax.set_xlabel([80,122]) # range of values in edges
...
# this shifts the plot so that nothing is visible

এবং

ax.set_xticklabels(edges)
...
# this labels the axis but does not centre around the mean:

এখানে চিত্র বর্ণনা লিখুন

আমি যে ইনপুট ডেটা ব্যবহার করছি তা প্রতিবিম্বিত করতে আমি অক্ষের মানগুলি কীভাবে পরিবর্তন করতে পারি সে সম্পর্কে কোনও ধারণা?


এই উত্তরে উল্লিখিত pcolorপরিবর্তে ব্যবহার করুন । imshow
নির্মল

উত্তর:


144

আমি xticklabelsসম্ভব হলে পরিবর্তনটি এড়াতে চেষ্টা করব , অন্যথায় এটি খুব বিভ্রান্তি পেতে পারে যদি আপনি উদাহরণস্বরূপ অতিরিক্ত ডেটা দিয়ে আপনার হিস্টোগ্রামকে ওভারপ্লিট করেন।

আপনার গ্রিডের ব্যাপ্তি নির্ধারণ সম্ভবত সেরা এবং imshowএটি দিয়ে extentকীওয়ার্ড যুক্ত করে কাজটি করা যেতে পারে । এইভাবে অক্ষগুলি স্বয়ংক্রিয়ভাবে সামঞ্জস্য হয়। আপনি যদি লেবেলগুলি পরিবর্তন করতে চান তবে আমি set_xticksসম্ভবত কিছু ফর্ম্যাটর ব্যবহার করব । সরাসরি লেবেল পরিবর্তন করা সর্বশেষ সমাধান হতে হবে।

fig, ax = plt.subplots(figsize=(6,6))

ax.imshow(hist, cmap=plt.cm.Reds, interpolation='none', extent=[80,120,32,0])
ax.set_aspect(2) # you may also use am.imshow(..., aspect="auto") to restore the aspect ratio

এখানে চিত্র বর্ণনা লিখুন


18
এটি interpolation="none"এখানে লক্ষণীয় যে এখানে ব্যবহার করা হয়েছিল, আসল উপাত্তগুলির চেয়ে অনেক বেশি সঠিক উপস্থাপনা।
লাগানো

4
একটি খুব দরকারী উত্তর; আমি এটি দুটি ভেরিয়েবলের (যেমন, সিসমিক তথ্য) ফাংশনের রঙিন প্লট তৈরি করতে ব্যবহার করেছি। আমি ইমপশো () এ "দিক = 'অটো'" বিকল্পটিও যুক্ত করেছি যাতে আমি ভূমিকম্পের প্রদর্শনটি 'প্রসারিত করতে এবং গ্রাস করতে' পারি।
কুর্ট পিক

11

আমারও একই সমস্যা ছিল এবং গুগল আমাকে এই পোস্টে প্রেরণ করছিল। আমার সমাধানটি কিছুটা আলাদা এবং কম কমপ্যাক্ট ছিল, তবে আশা করি এটি কারও পক্ষে কার্যকর হতে পারে।

Matplotlib.pyplot.imshow সহ আপনার চিত্র দেখানো 2D ডেটা প্রদর্শন করার জন্য একটি দ্রুত উপায়। তবে এটি ডিফল্টরূপে পিক্সেল গণনা সহ অক্ষগুলি লেবেল করে। আপনি যে 2D ডেটা প্লট করছেন তা যদি অ্যারে x এবং y দ্বারা সংজ্ঞায়িত কিছু অভিন্ন গ্রিডের সাথে মিলে যায় তবে আপনি সেই অ্যারেগুলিতে মানগুলি ব্যবহার করে এক্স এবং y অক্ষগুলি লেবেল করতে matplotlib.pyplot.xticks এবং matplotlib.pyplot.yticks ব্যবহার করতে পারেন। এটি অক্ষের পিক্সেল গণনায় প্রকৃত গ্রিডের সাথে সম্পর্কিত কিছু লেবেল সংযুক্ত করবে। এবং উদাহরণস্বরূপ প্যাকলারের মতো কিছু ব্যবহার করার চেয়ে এটি করা খুব দ্রুত।

আপনার ডেটা সহ এটি এখানে চেষ্টা করা হল:

import matplotlib.pyplot as plt

# ... define 2D array hist as you did

plt.imshow(hist, cmap='Reds')
x = np.arange(80,122,2) # the grid to which your data corresponds
nx = x.shape[0]
no_labels = 7 # how many labels to see on axis x
step_x = int(nx / (no_labels - 1)) # step between consecutive labels
x_positions = np.arange(0,nx,step_x) # pixel count at label position
x_labels = x[::step_x] # labels you want to see
plt.xticks(x_positions, x_labels)
# in principle you can do the same for y, but it is not necessary in your case
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.