我目前正试图让我的轮廓图得到持续改变的印象。我必须使用logscale作为值,因为其中一些比其他值大几个数量级。
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import ticker
K = np.linspace(-0.99, 5, 100)
x = np.linspace(1, 5, 100)
K, x = np.meshgrid(K, x)
static_diff = 1 / (1 + K)
fig = plt.figure()
plot = plt.contourf(K, x, static_diff, locator=ticker.LogLocator(numticks=300))
plt.grid(True)
plt.xlabel('K')
plt.ylabel('x')
plt.xlim([-0.99, 5])
plt.ylim([1, 5])
fig.colorbar(plot)
plt.show()
有没有办法获得更多这些线?我还尝试添加参数数量作为plt.contourf
函数的第四个参数。
答案 0 :(得分:1)
要指定等高线图的等级,您可以
使用levels
参数并提供级别的值列表。例如,20级,
plot = plt.contourf(K, x, static_diff, levels=np.logspace(-2, 3, 20))
使用您将提供matplotlib自动收录器的locator
参数
plt.contourf(K, x, static_diff, locator=ticker.LogLocator(subs=range(1,10)))
但请注意,LogLocator
不使用numticks参数,而是使用base
和subs
参数来确定刻度的位置。 See documentation
后一种情况的完整示例,它还使用LogNorm
在日志空间中更好地分配颜色:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import ticker
import matplotlib.colors
K = np.linspace(-0.99, 5, 100)
x = np.linspace(1, 5, 100)
K, x = np.meshgrid(K, x)
static_diff = 1 / (1 + K)
fig = plt.figure()
norm= matplotlib.colors.LogNorm(vmin=static_diff.min(), vmax=static_diff.max())
plot = plt.contourf(K, x, static_diff, locator=ticker.LogLocator(subs=range(1,10)), norm=norm)
#plot = plt.contourf(K, x, static_diff, levels=np.logspace(-2, 3, 20), norm=norm)
plt.grid(True)
plt.xlabel('K')
plt.ylabel('x')
plt.xlim([-0.99, 5])
plt.ylim([1, 5])
fig.colorbar(plot)
plt.show()