web-dev-qa-db-fra.com

Comment ajouter différents graphiques (sous forme d'encart) dans un autre graphique python

Je voudrais faire un graphique comme ça:

Ilustrative Figure from google

le problème est que j'ai les données de certains fichiers externes et que je peux faire le graphique d'arrière-plan, mais je ne sais pas comment ajouter un autre graphique à l'intérieur de celui que j'ai déjà et modifier les données pour obtenir des résultats différents dans les deux:

Ci-dessous, j'ajoute le code que j'utilise pour faire le graphique d'arrière-plan. J'espère que quelqu'un pourra vous aider.

from __future__ import division
import numpy as np
import matplotlib.pyplot as plt

plt.rc('text',usetex=True)
font = {'family':'serif','size':16}
plt.rc('font',**font)
plt.rc('legend',**{'fontsize':14})

matplotlib.rcParams['text.latex.preamble']=[r'\usepackage{amsmath}']

data=np.loadtxt(r'C:\...\file.txt')
plt.plot(data[:,0],data[:,6],linewidth = 3,label='B$_0$ = 1.5 T d',linestyle= '--', color='black')

plt.show()
27
Mac

Il y a plus d'une façon de faire cela, selon la relation que vous souhaitez que l'encart ait.

Si vous souhaitez simplement insérer un graphique qui n'a pas de relation définie avec le graphique plus grand, faites simplement quelque chose comme:

import matplotlib.pyplot as plt

fig, ax1 = plt.subplots()

# These are in unitless percentages of the figure size. (0,0 is bottom left)
left, bottom, width, height = [0.25, 0.6, 0.2, 0.2]
ax2 = fig.add_axes([left, bottom, width, height])

ax1.plot(range(10), color='red')
ax2.plot(range(6)[::-1], color='green')

plt.show()

enter image description here

Si vous voulez avoir une sorte de relation entre les deux, jetez un œil à quelques exemples ici: http://matplotlib.org/1.3.1/mpl_toolkits/axes_grid/users/overview.html#insetlocator

Ceci est utile si vous voulez que l'encart soit une version "zoomée" (disons, exactement à deux fois l'échelle de l'original) qui se mettra automatiquement à jour lorsque vous effectuez un panoramique/zoom interactif.

Pour les encarts simples, cependant, créez simplement de nouveaux axes comme je l'ai montré dans l'exemple ci-dessus.

39
Joe Kington

Vous pouvez le faire avec inset_axes méthode (voir docs ):

from mpl_toolkits.axes_grid1.inset_locator import inset_axes
inset_axes = inset_axes(parent_axes,
                    width="30%", # width = 30% of parent_bbox
                    height=1., # height : 1 inch
                    loc=3)

Voir cet exemple pour une démonstration complète.

11
pms