ম্যাটপ্ল্লোব বিভিন্ন আকারের সাবপ্লট


236

আমাকে একটি চিত্রে দুটি সাব-প্লট যুক্ত করতে হবে। একটি সাবপ্লোটের দ্বিতীয় (একই উচ্চতা) থেকে প্রায় তিনগুণ প্রশস্ত হওয়া দরকার। আমি এটি GridSpecএবং colspanযুক্তিটি ব্যবহার করে সম্পন্ন করেছি তবে আমি এটি ব্যবহার করে করতে চাই figureযাতে আমি পিডিএফে সংরক্ষণ করতে পারি। আমি figsizeকনস্ট্রাক্টারে আর্গুমেন্টটি ব্যবহার করে প্রথম চিত্রটি সামঞ্জস্য করতে পারি, তবে আমি কীভাবে দ্বিতীয় প্লটের আকার পরিবর্তন করব?


2
গ্রিডস্পেক একটি সাধারণ চিত্র নিয়ে কাজ করে।
22-22 এ tિલ્স্টেন

উত্তর:


370

আরেকটি উপায় হ'ল subplotsফাংশনটি ব্যবহার করা এবং এর সাথে প্রস্থের অনুপাতটি পাস করা gridspec_kw:

import numpy as np
import matplotlib.pyplot as plt 

# generate some data
x = np.arange(0, 10, 0.2)
y = np.sin(x)

# plot it
f, (a0, a1) = plt.subplots(1, 2, gridspec_kw={'width_ratios': [3, 1]})
a0.plot(x, y)
a1.plot(y, x)

f.tight_layout()
f.savefig('grid_figure.pdf')

1
এর জন্য ধন্যবাদ; plt.subplotsজিনিসগুলি করার উপায় অনেক বেশি ক্লিনার ইমো।
লুক ডেভিস

2
আমি গ্রিডস্পেকের চেয়ে সাবপ্লটগুলি পছন্দ করি কারণ অক্ষের জন্য তালিকাগুলিটি আর সেট করতে হবে না (গ্রিডস্পেকের সাথে আপনার এখনও অক্ষ এবং প্লটগুলি একে একে তৈরি করতে হবে)। সুতরাং সাবপ্লটগুলি পরিষ্কার এবং প্রকৃতপক্ষে ব্যবহার করার জন্য দ্রুত
ইয়েলকো ভ্যানিয়েট

3
যদি আমি চাই যে এক সারিতে দুটি প্লট উচ্চতার চেয়ে পৃথকও হয়? পরিবর্তনগুলি height_ratioঅন্যান্য সারির তুলনায় পুরো সারিটিকে প্রভাবিত করে।
মিচেল ভ্যান জুয়েলেন

সাবপ্লট ফাংশনের মাধ্যমে এটি সম্ভব নয়। যাইহোক, আপনি উপরের কোডটিতে এর মতো কিছু যুক্ত করতে পারেন: এমপিএল_ টোকলিটস.এক্সেস_গ্রিড 1 থেকে আমদানি করুন_এক্সেস_লোক্যাটেবল ডিভাইডার = মেক_এক্সেস_লোক্যাটেবল (a0) a_empty = বিভাজক। অ্যাপেন্ড_এক্সেস ("নীচে", আকার = "50%") a_empty.axis ('অফ')
হাগনে

2
আমি এই ত্রুটি পাচ্ছি ValueError: Expected the given number of height ratios to match the number of rows of the grid। আমি এটি {'width_ratios':[1]}1 সারি ইত্যাদির জন্য বলে সমাধান করেছি
মার্কাস ওয়েবার

223

আপনি ব্যবহার করতে পারেন gridspecএবং figure:

import numpy as np
import matplotlib.pyplot as plt 
from matplotlib import gridspec

# generate some data
x = np.arange(0, 10, 0.2)
y = np.sin(x)

# plot it
fig = plt.figure(figsize=(8, 6)) 
gs = gridspec.GridSpec(1, 2, width_ratios=[3, 1]) 
ax0 = plt.subplot(gs[0])
ax0.plot(x, y)
ax1 = plt.subplot(gs[1])
ax1.plot(y, x)

plt.tight_layout()
plt.savefig('grid_figure.pdf')

ফলস্বরূপ প্লট


31

সম্ভবত সহজ উপায় ব্যবহার করছে subplot2grid, বর্ণিত উপকাহিনী এর কাস্টমাইজ অবস্থান GridSpec ব্যবহার

ax = plt.subplot2grid((2, 2), (0, 0))

সমান

import matplotlib.gridspec as gridspec
gs = gridspec.GridSpec(2, 2)
ax = plt.subplot(gs[0, 0])

সুতরাং bmu এর উদাহরণ হয়ে যায়:

import numpy as np
import matplotlib.pyplot as plt

# generate some data
x = np.arange(0, 10, 0.2)
y = np.sin(x)

# plot it
fig = plt.figure(figsize=(8, 6))
ax0 = plt.subplot2grid((1, 3), (0, 0), colspan=2)
ax0.plot(x, y)
ax1 = plt.subplot2grid((1, 3), (0, 2))
ax1.plot(y, x)

plt.tight_layout()
plt.savefig('grid_figure.pdf')

29

আমি ব্যবহার না করে ম্যানুয়ালি মাপগুলি সামঞ্জস্য করতে pyplotএর axesঅবজেক্টটি ব্যবহার করেছি GridSpec:

import matplotlib.pyplot as plt
import numpy as np
x = np.arange(0, 10, 0.2)
y = np.sin(x)

# definitions for the axes
left, width = 0.07, 0.65
bottom, height = 0.1, .8
bottom_h = left_h = left+width+0.02

rect_cones = [left, bottom, width, height]
rect_box = [left_h, bottom, 0.17, height]

fig = plt.figure()

cones = plt.axes(rect_cones)
box = plt.axes(rect_box)

cones.plot(x, y)

box.plot(y, x)

plt.show()

2
গ্রিডস্পেক ছাড়াই ম্যাটপ্লটলিব ০.৯৯ এ এখনও আমাদের জন্য দরকারী!
টিমডে

3
যেখানে গ্রিডস্পেক অপর্যাপ্ত তাদের জন্য দরকারী
dreab করুন

সর্বকালের সেরা উত্তর। আপনি যদি বিভিন্ন ডিমেঞ্জেন্স (2 ডি এবং 3 ডি) এর সাবপ্লট করতে চান এবং তাদের বিভিন্ন আকারের করতে চান তবে ঠিক কী প্রয়োজন। এটি বোঝাও বেশ সহজ। ধন্যবাদ!
এমও
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.