为了账号安全,请及时绑定邮箱和手机立即绑定

在我的 matplotlib 图的轴之外添加一个图像

在我的 matplotlib 图的轴之外添加一个图像

富国沪深 2023-03-08 13:55:20
我第一次使用 matplot lib 制作 3d 图。我创建了这个情节:使用此代码:fig = plt.figure(figsize=(10, 10))ax = plt.axes(projection="3d")idx = 14#originax.scatter([0],[0],[0],s=200,marker='+',color='k')#object1ax.scatter(object1_z[idx],object1_ra[idx],object1_dec[idx], s=100, color='r',marker='o')#cross1ax.scatter(cross1_position[2],cross1_position[0],cross1_position[1], s=400, color='b',marker='X')#b_hatax.quiver(cross1_position[2],cross1_position[0],cross1_position[1],b_hat_z[idx],b_hat_ra[idx],b_hat_dec[idx],arrow_length_ratio=0.1,lw=2,color='b')#k_hatax.quiver(object1_z[idx],object1_ra[idx],object1_dec[idx],1,0,0,arrow_length_ratio=0.1,lw=2,color='b')#axisax.quiver(cross1_position[2]+(0.05*(cross1_position[2]-axis[2])),cross1_position[0]+(0.05*(cross1_position[0]-axis[0])),cross1_position[1]+(0.05*(cross1_position[1]-axis[1])),axis[2],axis[0],axis[1],arrow_length_ratio=0.1,color='r',pivot='tip')ax.quiver(cross1_position[2]-(0.05*(cross1_position[2]-axis[2])),cross1_position[0]-(0.05*(cross1_position[0]-axis[0])),cross1_position[1]-(0.05*(cross1_position[1]-axis[1])),-axis[2],-axis[0],-axis[1],arrow_length_ratio=0.1,color='r',pivot='tip')#joining linesax.plot([cross1_position[2],object1_z[idx]],[cross1_position[0],object1_ra[idx]],[cross1_position[1],object1_dec[idx]],linestyle='--',color='k',lw=2)ax.plot([cross1_position[2],53],[cross1_position[0],0],[cross1_position[1],0],linestyle='--',color='k',lw=2)ax.plot([object1_z[idx],53],[object1_ra[idx],0],[object1_dec[idx],0],linestyle='--',color='k',lw=2)# sphereu = np.linspace(0, 2*np.pi, 100)v = np.linspace(0, np.pi, 100)x = np.outer(np.cos(u),np.sin(v))y = np.outer(np.sin(u),np.sin(v))z = np.outer(np.ones(np.size(u)),np.cos(v))ax.plot_surface(x,y,z,rstride=4,cstride=4, color='r',alpha=0.1,facecolors=plt.cm.gray(z))我想在第一组轴之外的以下位置放置另一个球体:我的问题:我可以使用现有的轴来执行此操作吗?如果我尝试使用坐标(例如 (x=0, y=0, z=5))将我的第二个球体放在我想要的位置,那么这不会给我想要的东西,因为它会挤压我现有的图像(沿 z 轴)。我是否需要添加第二组不可见轴或类似的东西?总结:在上图中“HERE”的位置放置图像的好方法是什么。
查看完整描述

1 回答

?
www说

TA贡献1775条经验 获得超8个赞

我做了很多研究,但找不到添加仅包含 3D 图形的图像的方法。所以我使用了subplots,这是一个3D+2D的图,参考官方的。不幸的是,图形的右侧被设置为 3D 图形的中心并且无法移动。这不是您正在寻找的答案,但您可能会发现它很有用。


import matplotlib.pyplot as plt

import numpy as np

import matplotlib.patches as patches

import matplotlib.cbook as cbook


fig = plt.figure(figsize=(18,9))



test_img = '/Users/youraccount/Documents/Python/stackoverflow/logo-the-overflow.png'

with cbook.get_sample_data(test_img) as image_file:

    image = plt.imread(image_file)


# Make data

u = np.linspace(0, 2 * np.pi, 100)

v = np.linspace(0, np.pi, 100)

x = 10 * np.outer(np.cos(u), np.sin(v))

y = 10 * np.outer(np.sin(u), np.sin(v))

z = 10 * np.outer(np.ones(np.size(u)), np.cos(v))


ax = fig.add_subplot(121, projection='3d')

# Plot the surface

ax.plot_surface(x, y, z)


# Placement 0, 0 would be the bottom left, 1, 1 would be the top right.

ax.text2D(1.5, 0.3, "2D Text", transform=ax.transAxes, fontsize=24)


ax = fig.add_subplot(122)

im = ax.imshow(image)

patch = patches.Rectangle(xy=(1.0, -0.5), width=708, height=144, transform=ax.transData)

im.set_clip_path(patch)

ax.axis('off')


plt.show()

//img1.sycdn.imooc.com//640824070001e7a606530293.jpg

查看完整回答
反对 回复 2023-03-08
  • 1 回答
  • 0 关注
  • 93 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信