我有(H,ranges) = numpy.histogram2d()
计算的结果,我试图绘制它。
鉴于H
,我可以轻松地将其放入plt.imshow(H)
以获取相应的图片。 (见http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.imshow)
我的问题是所产生图像的轴是"细胞计数" H
的{{1}}与ranges.
我知道我可以使用关键字extent
(如:Change values on matplotlib imshow() graph axis所示)。但是这个解决方案对我不起作用:我range
上的值并没有线性增长(实际上它们呈指数级增长)
我的问题是:如何将range
的值放在plt.imshow()
中?或者至少,或者我可以手动设置plt.imshow
结果对象的标签值吗?
编辑extent
不是一个好方法。
答案 0 :(得分:2)
在@thomas回答中扩展一点
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.image as mi
im = np.random.rand(20, 20)
ticks = np.exp(np.linspace(0, 10, 20))
fig, ax = plt.subplots()
ax.pcolor(ticks, ticks, im, cmap='viridis')
ax.set_yscale('log')
ax.set_xscale('log')
ax.set_xlim([1, np.exp(10)])
ax.set_ylim([1, np.exp(10)])
通过让mpl处理非线性映射,您现在可以准确地过度绘制其他艺术家的情节。对此有一个性能影响(因为pcolor
绘制的费用比AxesImage
更贵),但获得准确的刻度是值得的。
答案 1 :(得分:1)
.factory('patients', ['$http', function($http){
var object = {
patients: []
};
object.getAll = function() {
return $http.get('/patients').success(function(data) {
angular.copy(data, object.patients);
});
}
object.create = function(patient) {
return $http.post('/patients', patient).success(function(data){
object.patients.push(data);
});
}
//add patient id to the url
object.delete = function(patient) {
return $http.delete('/patients/',patient).success(function(data){
console.log(data);
});
}
}
};
return object;
}])
用于显示图像,因此它不支持x和y bin。
您可以改为使用imshow
,
pcolor
或使用直接绘制直方图的H,xedges,yedges = np.histogram2d()
plt.pcolor(xedges,yedges,H)
。
答案 2 :(得分:1)
您只需将刻度标签更改为更适合您数据的标签即可。
例如,在这里我们将每第5个像素设置为指数函数:
import numpy as np
import matplotlib.pyplot as plt
im = np.random.rand(21,21)
fig,(ax1,ax2) = plt.subplots(1,2)
ax1.imshow(im)
ax2.imshow(im)
# Where we want the ticks, in pixel locations
ticks = np.linspace(0,20,5)
# What those pixel locations correspond to in data coordinates.
# Also set the float format here
ticklabels = ["{:6.2f}".format(i) for i in np.exp(ticks/5)]
ax2.set_xticks(ticks)
ax2.set_xticklabels(ticklabels)
ax2.set_yticks(ticks)
ax2.set_yticklabels(ticklabels)
plt.show()