如何在Matplotlib极坐标图中用图片替换x标记?
极坐标位置替换为图片的解决方案
不用手动调整add_axes的坐标比例,直接用OffsetImage和AnnotationBbox就能批量把极坐标点替换成图片,步骤如下:
完整代码
import numpy as np from PIL import Image import matplotlib.pyplot as plt from matplotlib.offsetbox import OffsetImage, AnnotationBbox # 创建画布并设置分辨率 fig = plt.figure(dpi=200) # 设置极坐标坐标轴 ax = fig.add_subplot(projection='polar') # 极坐标数据 r = [8,8,8,8,8,8,8,8,8] theta = np.deg2rad(np.arange(45,406,45)) # 加载要替换的图片(替换成你的图片路径) img = Image.open("your_image.png") # 极坐标转笛卡尔坐标,用于定位图片 x = np.cos(theta) * r y = np.sin(theta) * r # 批量添加图片到每个坐标点 for xi, yi in zip(x, y): # 设置图片缩放比例,根据需求调整 img_box = OffsetImage(img, zoom=0.1) # 添加图片标注,frameon=False去掉边框,box_alignment控制对齐 ab = AnnotationBbox(img_box, (xi, yi), frameon=False, box_alignment=(0.5, 0.5)) ax.add_artist(ab) # 设置坐标轴范围 ax.set_ylim(0,12) plt.show()
关键说明
- 极坐标转笛卡尔坐标:通过
np.cos(theta)*r和np.sin(theta)*r计算出图片在坐标轴上的笛卡尔位置,避免手动计算坐标比例 OffsetImage的zoom参数控制图片显示大小,可根据实际需求调整AnnotationBbox负责将图片绑定到指定坐标,box_alignment=(0.5,0.5)让图片中心对齐极坐标点,frameon=False移除不必要的边框
内容的提问来源于stack exchange,提问作者Seongmin Lee
相关产品推荐
相关产品推荐

