I want a contour plot showing contour levels corresponding to a particular set of x,y. I tried increasing the number of contour lines but it doesn't give the contour line near the required point.
I want to get a contour line to suppose around (0.1,0.1)
but am not able to do so, I tried increasing the number of contours but matplotlib doesn't plot it near the required point nor do I know the level of contour near that point.
khmax = np.arange(0,0.5,0.001)
Ncmax = np.arange(0,0.5,0.001)
[X, Y] = np.meshgrid(Ncmax,khmax)
fig, ax = plt.subplots()
contour = plt.contour(X,Y,VgN,50)
ax.set_title('magnitude of VgN/c')
ax.set_xlabel('Ncmax')
ax.set_ylabel('khmax')
ax.clabel(contour, inline= True, inline_spacing = -1,fmt = '%1.8f',fontsize=8)
plt.show()
It is not the complete code. Any kind of help or hint is highly appreciated.
CodePudding user response:
You could use a not evenly spaced number of levels for the contour:
VgN_min = VgN.min()
VgN_max = VgN.max()
number_of_contours = 21
power = 2
levels = np.linspace(VgN_min**(1/power), VgN_max**(1/power), number_of_contours)**power
Then you can use this parameter to plot the contour:
fig, ax = plt.subplots()
contour = plt.contour(X,Y,VgN, levels = levels)
ax.set_title('magnitude of VgN/c')
ax.set_xlabel('Ncmax')
ax.set_ylabel('khmax')
ax.clabel(contour, inline= True, inline_spacing = -1,fmt = '%1.8f',fontsize=8)
plt.show()
You can tune the power
value in order to change the skewness of the contour levels according to your needs:
Complete Code
import numpy as np
from matplotlib import pyplot as plt
khmax = np.arange(0,0.5,0.001)
Ncmax = np.arange(0,0.5,0.001)
[X, Y] = np.meshgrid(Ncmax,khmax)
VgN = X*Y
VgN_min = VgN.min()
VgN_max = VgN.max()
number_of_contours = 21
power = 3
levels = np.linspace(VgN_min**(1/power), VgN_max**(1/power), number_of_contours)**power
fig, ax = plt.subplots()
contour = plt.contour(X,Y,VgN, levels = levels)
ax.set_title('magnitude of VgN/c')
ax.set_xlabel('Ncmax')
ax.set_ylabel('khmax')
ax.clabel(contour, inline= True, inline_spacing = -1,fmt = '%1.8f',fontsize=8)
plt.show()
Note
In your code you didn't reported the expression of VgN
, so I supposed it to be something like VgN = X*Y
in the code above and so the above images represent this equation. Change it according to your expression of VgN
.