/ / तिरछे ग्रिड में मेटप्लोटलिब सबप्लॉट की व्यवस्था करें - अजगर, मेटप्लोटलिब, सबप्लॉट

Skewed ग्रिड में matplotlib subplots व्यवस्थित करें - पायथन, matplotlib, subplot

Matplotlib का उपयोग करके, मैं "कई प्रदर्शित करना चाहता हूंएक ग्रिड पर सबप्लोट्स जिसमें प्रति पंक्ति एक अलग संख्या में कॉलम होते हैं, जहां प्रत्येक उपप्लॉट का आकार लगभग एक जैसा होता है, और सबप्लॉट को इस तरह व्यवस्थित किया जाता है कि वे कम या ज्यादा केंद्रित हों, जैसे:

पैटर्न में कुल्हाड़ियों की ग्रिड (2, 3, 2)

यह ग्रिड बनाने के लिए एक बहुत ही सरल बात है जिसमें 2, 3, 2 पैटर्न है gridspec, लेकिन समस्या यह है कि gridspec, अनजाने में, उन्हें एक ग्रिड में संरेखित करें, इसलिए उन में 2 भूखंडों के साथ पंक्तियों में भूखंड व्यापक हैं:

ग्रिड ग्रिड के साथ गठबंधन

यहाँ कोड है कि उत्पन्न करने के लिए:

from matplotlib import gridspec
from matplotlib import pyplot as plt

fig = plt.figure()

arrangement = (2, 3, 2)
nrows = len(arrangement)

gs = gridspec.GridSpec(nrows, 1)
ax_specs = []
for r, ncols in enumerate(arrangement):
gs_row = gridspec.GridSpecFromSubplotSpec(1, ncols, subplot_spec=gs[r])
for col in range(ncols):
ax = plt.Subplot(fig, gs_row[col])
fig.add_subplot(ax)

for i, ax in enumerate(fig.axes):
ax.text(0.5, 0.5, "Axis: {}".format(i), fontweight="bold",
va="center", ha="center")
ax.tick_params(axis="both", bottom="off", top="off", left="off",
right="off", labelbottom="off", labelleft="off")

plt.tight_layout()

मुझे पता है कि मैं सबप्लॉट्स का एक समूह स्थापित कर सकता हूं औरइसकी ज्यामिति पर काम करके उनकी व्यवस्था को सुव्यवस्थित करें, लेकिन मुझे लगता है कि यह थोड़ा जटिल हो सकता है, इसलिए मैं उम्मीद कर रहा था कि एक सरल तरीका उपलब्ध हो सकता है।

मुझे ध्यान देना चाहिए कि भले ही मैं अपने उदाहरण के रूप में (2, 3, 2) व्यवस्था का उपयोग कर रहा हूं, लेकिन मैं मनमाने ढंग से संग्रह के लिए ऐसा करना पसंद करता हूं, न कि केवल एक।

उत्तर:

जवाब के लिए 3 № 1

विचार आम तौर पर खोजने के लिए हैसबप्लॉट्स के बीच भाजक, यानी सबसे बड़ा सबप्लॉट जो वांछित ग्रिड से बना हो सकता है, और सभी सबप्लॉट को उनमें से कई पर फैला सकता है जैसे कि वांछित लेआउट प्राप्त होता है।

यहां छवि विवरण दर्ज करें

यहाँ आपके पास 3 पंक्तियाँ और 6 कॉलम हैं और प्रत्येकसबप्लॉट 1 पंक्ति और दो कॉलमों को फैलाता है, बस यह है कि पहली पंक्ति में सबप्लॉट्स 1/2 और 3/4 स्थान पर होते हैं, जबकि दूसरी पंक्ति में वे 0/1, 2/3, 4/5 स्थान पर होते हैं।

import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec

gs = gridspec.GridSpec(3, 6)
ax1a = plt.subplot(gs[0, 1:3])
ax1b = plt.subplot(gs[0, 3:5])
ax2a = plt.subplot(gs[1, :2])
ax2b = plt.subplot(gs[1, 2:4])
ax2c = plt.subplot(gs[1, 4:])
ax3a = plt.subplot(gs[2, 1:3])
ax3b = plt.subplot(gs[2, 3:5])


for i, ax in enumerate(plt.gcf().axes):
ax.text(0.5, 0.5, "Axis: {}".format(i), fontweight="bold",
va="center", ha="center")
ax.tick_params(axis="both", bottom="off", top="off", left="off",
right="off", labelbottom="off", labelleft="off")

plt.tight_layout()

plt.show()

यहां छवि विवरण दर्ज करें