I'd like to make a graph like that:
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()
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.
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.
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()
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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With