首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用mollweide投影制作嵌入图?

如何用mollweide投影制作嵌入图?
EN

Stack Overflow用户
提问于 2022-08-19 10:42:57
回答 2查看 118关注 0票数 1

我想用Mollweide投影来绘制一个主要轴和嵌入轴的天图。这对于主轴来说很容易,但对于嵌入式系统就不容易了。我试过几种不同的方法,但对嵌入式系统不起作用。请帮帮我!

这里你可以找到纬度和经度数据,这里你可以找到天空位置概率密度数据。

首先,我做了一个主要情节:

代码语言:javascript
复制
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上做一个例子,也就是说,

代码语言:javascript
复制
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图上的等高线是扭曲的,这与我的情况有关。所以这是非常次优的。

如有任何建议和建议,敬请见谅。

EN

回答 2

Stack Overflow用户

发布于 2022-11-11 09:39:20

要以正确的方式获得轴,可以使用rotate旋转子图。

关于您的轮廓没有显示的事实,这可能是因为您必须添加transform关键字。如果您不指定它,默认情况下它是在像素坐标(https://docs.astropy.org/en/stable/visualization/wcsaxes/overlays.html)中绘制的。

下面的示例显示,通过添加ax.get_transform("world")获得所需的点(蓝色)。由于rotate,蓝色和绿色点位于右下角。

我想对于contour来说应该是一样的。

代码语言:javascript
复制
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"))

票数 1
EN

Stack Overflow用户

发布于 2022-11-16 21:31:41

我的派对有点晚了,但我想值得一提的是,我为EOmaps创造了一个不错的EOmaps.

它允许您在任意投影中创建嵌入映射,并且您可以添加任何您想要的功能!

代码语言:javascript
复制
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]})

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73415539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档