আমি সত্যের পরে ফটোশপ ব্যবহারের সংক্ষিপ্ত আকারের মতো গ্রাফের মতো একই গ্রাফিকের গ্রাফটি পেতে পারি না Photos আমি কীভাবে মিলবে উচ্চতাগুলি?
fraction
বা shrink
নিবন্ধগুলি।
আমি সত্যের পরে ফটোশপ ব্যবহারের সংক্ষিপ্ত আকারের মতো গ্রাফের মতো একই গ্রাফিকের গ্রাফটি পেতে পারি না Photos আমি কীভাবে মিলবে উচ্চতাগুলি?
fraction
বা shrink
নিবন্ধগুলি।
উত্তর:
আপনি ম্যাটপ্ল্লোলিব এক্সিসডিভিডার দিয়ে সহজেই এটি করতে পারেন ।
লিঙ্কযুক্ত পৃষ্ঠা থেকে প্রাপ্ত উদাহরণটি সাবপ্লট ব্যবহার না করেও কাজ করে:
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import make_axes_locatable
import numpy as np
plt.figure()
ax = plt.gca()
im = ax.imshow(np.arange(100).reshape((10,10)))
# create an axes on the right side of ax. The width of cax will be 5%
# of ax and the padding between cax and ax will be fixed at 0.05 inch.
divider = make_axes_locatable(ax)
cax = divider.append_axes("right", size="5%", pad=0.05)
plt.colorbar(im, cax=cax)
plt.title
এটি ডানদিকে অদলবদল প্রদর্শিত হবে। এ থেকে উত্তরণের কোনও উপায় আছে কি?
এই সংমিশ্রণটি (এবং এগুলির নিকটতম মানগুলি) রঙ বারবার প্লটটিতে ছোট আকারে রাখার জন্য "ম্যাজিকালি" কাজ করে বলে মনে হচ্ছে, আকারের আকার যাই হোক না কেন।
plt.colorbar(im,fraction=0.046, pad=0.04)
এটিতে অক্ষটি ভাগ করে নেওয়াও প্রয়োজন হয় না যা প্লটটি স্কোয়ারের বাইরে চলে যেতে পারে।
im_ratio = data.shape[0]/data.shape[1]
plt.colorbar(im,fraction=0.046*im_ratio, pad=0.04)
কোথায় data
।
@ বোগাস্ট্রন ইতিমধ্যে ম্যাটপ্ল্লোলিব ডক্স দ্বারা প্রস্তাবিত উত্তর দিয়েছেন যা সঠিক উচ্চতা উত্পন্ন করে তবে এটি একটি ভিন্ন সমস্যা প্রবর্তন করে। এখন রঙের বারের প্রস্থ (পাশাপাশি রঙ বার এবং প্লটের মধ্যবর্তী স্থান) প্লটের প্রস্থের সাথে পরিবর্তিত হয়। অন্য কথায়, কালারবারের অনুপাতটি আর ঠিক করা হয়নি।
সঠিক উচ্চতা এবং প্রদত্ত দিক অনুপাত উভয়ই পেতে আপনাকে রহস্যময় axes_grid1
মডিউলটির থেকে আরও গভীর গভীরতা অর্জন করতে হবে ।
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import make_axes_locatable, axes_size
import numpy as np
aspect = 20
pad_fraction = 0.5
ax = plt.gca()
im = ax.imshow(np.arange(200).reshape((20, 10)))
divider = make_axes_locatable(ax)
width = axes_size.AxesY(ax, aspect=1./aspect)
pad = axes_size.Fraction(pad_fraction, width)
cax = divider.append_axes("right", size=width, pad=pad)
plt.colorbar(im, cax=cax)
নোট করুন যে এটি রঙিন বারের প্রশস্ততা প্লটের উচ্চতা নির্দিষ্ট করে ( চিত্রটির প্রস্থের বিপরীতে , যেমনটি আগে ছিল)।
কালারবার এবং প্লটের মধ্যে ব্যবধানটি এখন রঙ বারের প্রস্থের একটি ভগ্নাংশ হিসাবে নির্দিষ্ট করা যেতে পারে যা চিত্রের প্রস্থের ভগ্নাংশের চেয়ে অনেক বেশি অর্থবহ সংখ্যা number
হালনাগাদ:
আমি এই বিষয়ের উপর একটি আইপথন নোটবুক তৈরি করেছি , যেখানে আমি উপরের কোডটি সহজেই ব্যবহারযোগ্য ক্রিয়াকলাপে প্যাক করেছি:
import matplotlib.pyplot as plt
from mpl_toolkits import axes_grid1
def add_colorbar(im, aspect=20, pad_fraction=0.5, **kwargs):
"""Add a vertical color bar to an image plot."""
divider = axes_grid1.make_axes_locatable(im.axes)
width = axes_grid1.axes_size.AxesY(im.axes, aspect=1./aspect)
pad = axes_grid1.axes_size.Fraction(pad_fraction, width)
current_ax = plt.gca()
cax = divider.append_axes("right", size=width, pad=pad)
plt.sca(current_ax)
return im.axes.figure.colorbar(im, cax=cax, **kwargs)
এটি এর মতো ব্যবহার করা যেতে পারে:
im = plt.imshow(np.arange(200).reshape((20, 10)))
add_colorbar(im)
আমি উপরের সমস্ত উত্তর প্রশংসা করি। যাইহোক, কিছু উত্তর এবং মন্তব্য মত নির্দিষ্ট, axes_grid1
মডিউল না ঠিকানা GeoAxes, সামঞ্জস্য যেহেতু পারেন fraction
, pad
, shrink
, এবং অন্যান্য অনুরূপ পরামিতি না অগত্যা খুব সুনির্দিষ্ট আদেশ, যা সত্যিই আমাকে বিরক্ত করে দিতে পারেন। আমি বিশ্বাস করি যে এর দ্বারা প্রদত্ত যে সমস্ত সমস্যা উল্লেখ করা হয়েছে colorbar
তার axes
সমাধানের জন্য এটির দেওয়া আরও ভাল সমাধান হতে পারে।
import matplotlib.pyplot as plt
import numpy as np
fig=plt.figure()
ax = plt.axes()
im = ax.imshow(np.arange(100).reshape((10,10)))
# Create an axes for colorbar. The position of the axes is calculated based on the position of ax.
# You can change 0.01 to adjust the distance between the main image and the colorbar.
# You can change 0.02 to adjust the width of the colorbar.
# This practice is universal for both subplots and GeoAxes.
cax = fig.add_axes([ax.get_position().x1+0.01,ax.get_position().y0,0.02,ax.get_position().height])
plt.colorbar(im, cax=cax) # Similar to fig.colorbar(im, cax = cax)
পরে, আমি দেখতে পেয়েছি যে matplotlib.pyplot.colorbar
সরকারী ডকুমেন্টেশনগুলিax
বিকল্পও দেয় যা বিদ্যমান অক্ষগুলি যা রঙবারের জন্য জায়গা সরবরাহ করবে। সুতরাং, এটি একাধিক সাবপ্লটগুলির জন্য দরকারী, নিম্নলিখিত দেখুন see
fig, ax = plt.subplots(2,1,figsize=(12,8)) # Caution, figsize will also influence positions.
im1 = ax[0].imshow(np.arange(100).reshape((10,10)), vmin = -100, vmax =100)
im2 = ax[1].imshow(np.arange(-100,0).reshape((10,10)), vmin = -100, vmax =100)
fig.colorbar(im1, ax=ax)
আবার, আপনি আমার দৃষ্টিভঙ্গি থেকে আরও সঠিক উপায়, ক্যাক্স নির্দিষ্ট করেও অনুরূপ প্রভাব অর্জন করতে পারেন।
fig, ax = plt.subplots(2,1,figsize=(12,8))
im1 = ax[0].imshow(np.arange(100).reshape((10,10)), vmin = -100, vmax =100)
im2 = ax[1].imshow(np.arange(-100,0).reshape((10,10)), vmin = -100, vmax =100)
cax = fig.add_axes([ax[1].get_position().x1-0.25,ax[1].get_position().y0,0.02,ax[0].get_position().y1-ax[1].get_position().y0])
fig.colorbar(im1, cax=cax)
আপনি তৈরি যখন colorbar
ভগ্নাংশ এবং / অথবা পরামিতিগুলি সঙ্কুচিত করে ব্যবহার চেষ্টা করবেন।
নথি থেকে:
ভগ্নাংশ 0.15; কালারবারের জন্য ব্যবহার করতে মূল অক্ষের ভগ্নাংশ
সঙ্কুচিত 1.0; ভগ্নাংশ যা দ্বারা রঙবার সঙ্কুচিত করা
colorbar()
ফাংশন বা পদ্ধতির পরামিতি হতে হবে ।
উপরের সমস্ত সমাধানগুলি ভাল, তবে আমি @ স্টিভ এবং @ বেজোটার সেরা পছন্দ কারণ তারা অভিনব কলগুলিতে জড়িত না এবং সর্বজনীন are
সর্বজনীন দ্বারা আমি বোঝাতে চাইছি যেটি সহ যে কোনও ধরণের অক্ষের সাথে কাজ করে GeoAxes
। উদাহরণস্বরূপ, এটি ম্যাপিংয়ের জন্য আপনার কাছে অনুমানের অক্ষ রয়েছে:
projection = cartopy.crs.UTM(zone='17N')
ax = plt.axes(projection=projection)
im = ax.imshow(np.arange(200).reshape((20, 10)))
একটি কল
cax = divider.append_axes("right", size=width, pad=pad)
এর সাথে ব্যর্থ হবে: KeyException: map_projection
সুতরাং, সব ধরণের অক্ষের সাথে রঙিন আকারের একমাত্র সর্বজনীন উপায় হ'ল:
ax.colorbar(im, fraction=0.046, pad=0.04)
আপনার সেরা আকার পেতে 0.035 থেকে 0.046 পর্যন্ত ভগ্নাংশ নিয়ে কাজ করুন। যাইহোক, ভগ্নাংশ এবং প্যাডিগের মানগুলি আপনার প্লটটির জন্য সেরা ফিটের জন্য সামঞ্জস্য করা দরকার এবং রঙবারের দিকটি উল্লম্ব অবস্থান বা অনুভূমিকের মধ্যে থাকলে তার উপর নির্ভর করে পৃথক হবে।
shrink
যখন প্যারামিটার পারি তখন যখন fraction
একত্রে pad
পছন্দসই ফলাফলগুলি পর্যাপ্ত পরিমাণে না আসে।