我想用Mollweide投影来绘制一个主要轴和嵌入轴的天图。这对于主轴来说很容易,但对于嵌入式系统就不容易了。我试过几种不同的方法,但对嵌入式系统不起作用。请帮帮我!
这里你可以找到纬度和经度数据,这里你可以找到天空位置概率密度数据。
首先,我做了一个主要情节:
xmin = min(l)
xmax = max(l)
ymin = min(b)
ymax = max(b)
X, Y = np.meshgrid(np.linspace(xmin, xmax, 100), np.linspace(ymin, ymax, 100))
mpl.rcParams["text.usetex"] = True
fig = plt.figure(1)
fig.set_figheight(8)
fig.set_figwidth(8)
ax = plt.axes(projection='mollweide')
ax.grid()
# skypost is the sky location probability-density data accessible above
plt.contour(X, Y, skypost, colors='blue', levels=[5, 50, 95])效果很好。接下来,我定义了嵌入轴并绘制了等高线,但是似乎没有完全可行的方法。我想要的是嵌入式放大的轮廓,而保持的mollweide投影。我试着在ligo.skymaps上做一个例子,也就是说,
axesinset = plt.axes(
[0.0, 0.2, 0.25, 0.25],
projection='astro degrees zoom',
center='110d +20d',
radius='10 deg' )
plt.sca(axesinset)
axesinset.contour(X, Y, skypost, colors='blue', levels=[5, 50, 95])
axesinset.grid()但这是行不通的,因为轮廓甚至没有出现!我不明白他们为什么不出现。我也不明白为什么嵌入的x轴是向后的?

相反,我尝试在嵌入体中绘制一个新的mollweide投影,并限制xlim和ylim,但是它说这些选项对于mollweide投影是不支持的。有办法绕过这个限制轴的限制吗?

最后,我试着做一个没有mollweide的规则嵌入,但是等高线的形状相对于主mollweide图上的等高线是扭曲的,这与我的情况有关。所以这是非常次优的。

如有任何建议和建议,敬请见谅。
发布于 2022-11-11 09:39:20
要以正确的方式获得轴,可以使用rotate旋转子图。
关于您的轮廓没有显示的事实,这可能是因为您必须添加transform关键字。如果您不指定它,默认情况下它是在像素坐标(https://docs.astropy.org/en/stable/visualization/wcsaxes/overlays.html)中绘制的。
下面的示例显示,通过添加ax.get_transform("world")获得所需的点(蓝色)。由于rotate,蓝色和绿色点位于右下角。
我想对于contour来说应该是一样的。
ax = plt.subplot(111, projection='geo degrees zoom',
center="0d - 0d", radius='10 deg', rotate='180 deg')
ax.grid()
ax.set_xlabel(r"$\phi \, [deg]$")
ax.set_ylabel(r"$\theta \, [deg]$")
ax.scatter(0,0, color = "blue")
ax.scatter(100,0, color = "green")
ax.scatter(0,0, color = "red", transform = ax.get_transform("world"))

发布于 2022-11-16 21:31:41
我的派对有点晚了,但我想值得一提的是,我为EOmaps创造了一个不错的EOmaps.
它允许您在任意投影中创建嵌入映射,并且您可以添加任何您想要的功能!
from eomaps import Maps
m = Maps(Maps.CRS.Mollweide())
m.add_feature.preset.coastline()
# create a rectangular inset-map that shows a 5 degree rectangle
# centered around a given point
inset = m.new_inset_map(xy=(6, 43), xy_crs=4326,
radius=5, radius_crs=4326,
inset_crs=Maps.CRS.Mollweide(),
shape="rectangles")
inset.add_feature.preset.coastline()
inset.add_feature.preset.ocean()
inset.add_feature.cultural_10m.urban_areas(fc="r", ec="none")
m.apply_layout(
{'0_map': [0.01, 0.17333, 0.98, 0.65333],
'1_map': [0.05, 0.11667, 0.43341, 0.76667]})

https://stackoverflow.com/questions/73415539
复制相似问题