Creating a parametric plot - python

Hi i'm new to python I've been trying to recreate a parametric plot in python. the original was mathematica this is what i have so far. I don' think ill have a problem formatting the graph if i follow the proper syntax. The problem that i'm having is how to get it to plot. This is what the plot should look like 1
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline
gamma_0 = 72.8
temp = 293.15
gamma[x_2]= gamma_0 -0.0187 * temp * math.log(1+628.14*55.556* x_2)
plt.plt(gamma[x_2])
plt.xlabel('Log_10x_2')
plt.ylabel('gamma (erg cm^2)')

This is what i got from your limited question. The Problem is In Function Calling with plt
The line :
plt.plt(gamma[x_2])
must be like
plt.plot(gamma[x_2])

Related

Plot scatter graphs with matplotlib subplot

I am trying to plot a scatter diagram. It will take multiple arrays as input but plot into a single graph.
Here is my code:
import numpy as np
import os
import matplotlib.pyplot as plt
ax = plt.gca()
n_p=np.array([17.2,25.7,6.1,0.9,0.5,0.2])
n_d=np.array([1,2,3])
a_p=np.array([4.3,1.4,8.1,1.8,7.9,7.0])
a_d=np.array([12,13,14])
ax.scatter = ([n_d[0]/n_d[1]],[n_p[0]/n_p[1]])
ax.scatter = ([a_d[0]/a_d[1]],[a_p[0]/a_p[1]])
I will read the arrays from csv file, here I just put a simple example (for that I imported os). I want to plot the ratio of array element 2/ element 1 of n_p (as x-axis) and same with n_d (as y-axis). This will give a point in the graph. Similar operation will be followed by a_p and a_d array, and the point will be appended to the graph. There will be more data to append, but to understand the process, two is enough.
I tried to follow example from here.
If I use the color, I get syntax error.
If I do not use color, I get a blank plot.
Sorry, my coding experience is beginner so code is rather nasty.
Thanks in advance.
remove the = from the function call!
import numpy as np
import os
import matplotlib.pyplot as plt
ax = plt.gca()
n_p=np.array([17.2,25.7,6.1,0.9,0.5,0.2])
n_d=np.array([1,2,3])
a_p=np.array([4.3,1.4,8.1,1.8,7.9,7.0])
a_d=np.array([12,13,14])
ax.scatter([n_d[0]/n_d[1]],[n_p[0]/n_p[1]])
ax.scatter([a_d[0]/a_d[1]],[a_p[0]/a_p[1]])

Python - Not able to plot graph from a numpy array

I am trying plot a graph with a numpy array but the error occur in plt.plot(s,s).
import numpy as np
import matplotlib.pyplot as plt
def npArrDefine():
np.array=[]
s=np.array
for i in range(10):
s.append(i+3)
plt.plot(s,s)
plt.axis([0,5,0,20])
plt.show()
npArrDefine()
There's a lot of things wrong with your code.
np.array=[] and s=np.array. Here, you are setting a name that numpy uses to be an empty list (horrible!), and then you are setting s to be that empty list. Don't do this. Simply do s=[].
Later on you are trying to plot by using plt.plot(s,s) which means you want to plot s against itself. This will always give you a straight 45 degree line with 0 intercept even if your code worked.
Your code block should be:
s=[]
for i in range(10):
s.append(i+3)
s = np.array(s) #This line is optional, pyplot can use any array-like.
plt.plot(s)
...

Is it possible to plot a "checkerboard" type plot in python?

I have a data set that has two independent variables and 1 dependent variable. I thought the best way to represent the dataset is by a checkerboard-type plot wherein the color of the cells represent a range of values, like this:
I can't seem to find a code to do this automatically.
You need to use a plotting package to do this. For example, with matplotlib:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm
X = 100*np.random.rand(6,6)
fig, ax = plt.subplots()
i = ax.imshow(X, cmap=cm.jet, interpolation='nearest')
fig.colorbar(i)
plt.show()
For those who come across this years later as myself, what Original Poster wants is a heatmap.
Matplotlib has documentation regarding the following example here.

2D Heat Map using matplot lib

I'm new to python please so bear with me:
I'v been tryin to plot a 2D Heat-Map, similar to the one shown here:
http://mips.helmholtz-muenchen.de/plant/static/images/A_thal_LTRs.png
using the contourf or the colorbar classes, but it just doesnt seem to work.
im using two very simple data-sets as showen in the code:
`
import numpy as np
import matplotlib.pyplot as plt
abundance = [0.2,0.3,0.25,0.05,0.05,0.04,0.06]
grain_size = [200,100,70,50,10,5,1]
`
i would like the grain_size array to be my x_axis (on a logarithmic scale) and my colors to represent the abundance corresponding with each grain_size (so 0.2 corresponds with 200, 0.3 corresponds with 100 etc...)
so i know i need to normalize my abundance array to fit to a color-bar, but then what?
thanks a lot!
Is this what you want ?
import matplotlib.cm as cm
ab = np.array(abundance)
gs = np.array(grain_size)
ab_norm = ab/ab.max()*100
plt.matshow([ab_norm], cmap=cm.gist_rainbow_r)
plt.xticks(range(7), gs)
plt.yticks(range(1), ["abundance"])
plt.colorbar()
plt.show()
You can change colormap by choosing another one, see here for some of them.
Tell me if it's not that, and if you don't understand something.
Hope this helps.

matplotlib NaN's vs pylab NaN's

I have two similar pieces of matplotlib codes that produce different results.
1:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0,10,100)
y = np.linspace(0,10,100)
y[10:40] = np.nan
plt.plot(x,y)
plt.savefig('fig')
2:
from pylab import *
x = linspace(0,10,100)
y = linspace(0,10,100)
y[10:40] = np.nan
plot(x,y)
savefig('fig')
Code #1 produces a straight line with the NaN region filled in with a solid line of a different color
Code #2 produces a figure with a straight line but does not fill in the NaN region with a line. Instead there is a gap there.
How can I make code # 1 produce a gap in place of NaN's like code #2. I have been googling for a couple of days and have come up with nothing. Any help or advice would be appreciated. Thanks in advance
Just to explain what's probably happening:
The two pieces of code you showed are identical. They will always produce the same output if called by themselves. pylab is basically a just a few lines of code that does: (There's a bit more to it than this, but it's the basic idea.)
from numpy import *
from matplotlib.mlab import *
from matplotlib.pyplot import *
There's absolutely no way for pylab.plot to reference a different function than plt.plot
However, if you just call plt.plot (or pylab.plot, they're the same function), it plots on the current figure.
If you plotted something on that figure before, it will still be there. (If you're familiar with matlab, matplotlib defaults to hold('on'). You can change this with plt.hold, but it's best to be more explicit in python and just create a new figure.)
Basically, you probably did this:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0,10,100)
y = np.linspace(0,10,100)
plt.plot(x,y)
plt.savefig('fig')
And then, in the same interactive ipython session, you did this:
y[10:40] = np.nan
plt.plot(x, y)
plt.savefig('fig')
Because you didn't call show, the current figure is still the same one as it was before. The "full" line is still present beneath the second one, and the second line with the NaN's is a different color because you've plotted on the same axes.
This is one of the many reasons why it's a good idea to use the object-oriented interface. That way you're aware of exactly which axes and figure you're plotting on.
For example:
fig, ax = plt.subplots()
ax.plot(x, y)
fig.savefig('test.png')
If you're not going to do that, at very least always explicitly create a new figure and/or axes when you want a new figure. (e.g. start by calling plt.figure())

Categories

Resources