我在玩体积数据,并试图投射出一幅类似“宇宙网”的图像。在
我几乎创建了一个文件路径,并用打开hdf5文件的模块打开数据。x
和y
值是通过从文件gas_pos
建立索引来表示的,并且直方图由不同的属性来加权,gas_density
在这种情况下:
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.colors import LinearSegmentedColormap
from matplotlib.ticker import LogFormatter
cmap = LinearSegmentedColormap.from_list('mycmap', ['black', 'steelblue', 'mediumturquoise', 'darkslateblue'])
fig = plt.figure()
ax = fig.add_subplot(111)
H = ax.hist2d(gas_pos[:,0]/0.7, gas_pos[:,1]/0.7, bins=500, cmap=cmap, norm=matplotlib.colors.LogNorm(), weights=gas_density);
cb = fig.colorbar(H[3], ax=ax, shrink=0.8, pad=0.01, orientation="horizontal", label=r'$ \rho\ [M_{\odot}\ \mathrm{kpc}^{-3}]$')
ax.tick_params(axis=u'both', which=u'both',length=0)
ax.get_xaxis().set_visible(False)
ax.get_yaxis().set_visible(False)
plt.show()
给我这个:
这很好,但我想提高质量,去掉它的颗粒。当我尝试imshow
插值时:
我用错了吗?或者有更好的方法可以用来修改像素吗?在
如果有人想玩我的数据,我会在今天晚些时候上传数据!在
您可能需要在对}
imshow
的调用中设置interpolation='None'
,而不是{使用}。在
interpolation='sinc'
确实是一种平滑绘图的好方法。其他的例如"gaussian"
、"bicubic"
或{您观察到的问题是
imshow
图绘制在hist2d
图的顶部,因此采用了它的轴限制。这些限制似乎小于imshow图中的点数,因此您只能看到全部数据的一部分。在解决方案要么根本不绘制hist2d图,要么至少将其绘制到另一个子图或图形中。在
为了实现第一个想法,您可以使用
numpy.histogram2d
计算直方图而不绘制它我还建议您阅读^{} 文档,其中包括在matplotlib中绘制直方图输出的示例。在
相关问题 更多 >
编程相关推荐