我正在尝试使用Matplotlib 2.0.0版本创建一个具有给定数据的密度图,并在两个坐标轴x,y中使用对数坐标。我已经提出了下面的代码,问题在于,对于日志情节,不要给出正确的功能行为。matplotlib中的日志密度颜色图
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm
init = 0.0
points = 500
final_value = 100
steep = (final_value-init)/points
list_values_x = np.arange(init,final_value,steep)
list_values_y = np.arange(init,final_value,steep)
#WE CREATE OUT DATA FILE
f1 = open("data.txt", "w")
for i in list_values_x:
for j in list_values_y:
f1.write(str(i) +" "+str(j)+" "+str(0.0001*(i**2+j**2)) +"\n")
f1.close()
#NOW WE OPEN THE FILE WITH THE DATA AND MAKE THE PLOT
x,y,temp = np.loadtxt('data.txt').T #Transposed for easier unpacking
nrows, ncols = points, points
grid = temp.reshape((nrows, ncols))
# LINEAR PLOT
fig1 = plt.imshow(grid, extent=(x.min(), x.max(), y.max(), y.min()),
interpolation='nearest', cmap=cm.gist_rainbow)
plt.axis([x.min(), x.max(),y.min(), y.max()])
plt.colorbar()
plt.suptitle('Example', fontsize=15)
plt.xlabel('x', fontsize=16)
plt.ylabel('y', fontsize=16)
plt.show()
# LOG-LOG PLOT
fig, (ax1) = plt.subplots(ncols=1, figsize=(8, 4))
ax1.imshow(grid, aspect="auto", extent=(1, 1e2, 1, 1e2), interpolation='nearest')
ax1.set_yscale('log')
ax1.set_xscale('log')
ax1.set_title('Example with log scale')
plt.show()
我用来绘制图的数据是无关紧要的,它只是一个例子。因此,第一个图是以线性比例给出的。第二个图是用对数 - 对数标度给出的,但很明显这是不正确的,两个图中的行为是绝对不同的,我使用相同的数据。此外,我不知道如何把彩条在双对数坐标
任何想法,为什么出现这种情况?感谢您的关注。
PD:为了构建log-log图中,我使用的是apears在(http://matplotlib.org/devdocs/users/whats_new.html#non-linear-scales-on-image-plots)
好样的!这很好。谢谢 – Joe