Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to add different graphs (as an inset) in another python graph [duplicate]

I'd like to make a graph like that:

Ilustrative Figure from google

the problem is, I've got the data from some external files, and I can make the background graph, but I have no idea how to add another graph inside of the one that I already have and change the data to have different results in both of them:

Below I am adding the code I am using to do the background graph. Hope someone can help.

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() 
like image 667
Mac Avatar asked Jan 08 '14 16:01

Mac


People also ask

How do you plot multiple graphs on the same graph in Python?

Create x, y1 and y2 data points using numpy. Add a subplot to the current figure at index 1. Plot curve 1 using x and y1. Add a subplot to the current figure at index 2.

How do you merge two graphs in Python?

MatPlotLib with Python Plot (x, y1) and (x, y2) points using plot() method. Get the xy data points of the current axes. Use argsort() to return the indices that would sort an array. Append x and y data points of each plot.


2 Answers

There's more than one way do to this, depending on the relationship that you want the inset to have.

If you just want to inset a graph that has no set relationship with the bigger graph, just do something like:

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

If you want to have some sort of relationship between the two, have a look at some of the examples here: http://matplotlib.org/1.3.1/mpl_toolkits/axes_grid/users/overview.html#insetlocator

This is useful if you want the inset to be a "zoomed in" version, (say, at exactly twice the scale of the original) that will automatically update as you pan/zoom interactively.

For simple insets, though, just create a new axes as I showed in the example above.

like image 103
Joe Kington Avatar answered Sep 21 '22 21:09

Joe Kington


You can do this with inset_axes method (see docs):

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

See this example for a full demo.

like image 30
pms Avatar answered Sep 19 '22 21:09

pms