技术问题:如何镜像图形,将X轴(-200 -100 0 100 200)转为(200 100 0 100 200)?
实现X轴镜像刻度的两种方法
你的需求是将X轴刻度从(-200, -100, 0, 100, 200)替换为(200, 100, 0, 100, 200),本质是让X轴以0为中心,左右两侧都显示正刻度,结合你的对称图形,有两种简单实现方式:
方法1:修改刻度标签(最快)
因为你的npiez是关于Y轴对称的(计算时用了abs(r)),直接保留原数据,替换X轴的刻度标签即可:
import numpy as np import matplotlib.pyplot as plt T = 1400 Q = 1000 R = 1000 h0 = 50 r = np.linspace(-R, R, 500) s = Q * np.log(R / abs(r)) / (2 * np.pi * T) npiez = h0 - s fig, ax = plt.subplots() ax.plot(r, npiez) # 设置刻度位置和自定义标签 ax.set_xticks([-200, -100, 0, 100, 200]) ax.set_xticklabels([200, 100, 0, 100, 200]) # 限制X轴显示范围到±200,匹配目标刻度 ax.set_xlim(-200, 200) plt.show()
方法2:生成对称X数据
如果需要让X轴的实际数值就是从200→0→200,可以重新生成X数据,直接绘制对称图形:
import numpy as np import matplotlib.pyplot as plt T = 1400 Q = 1000 R = 1000 h0 = 50 # 生成从200到0再到200的X数据(这里用R=1000,可按需调整) x = np.concatenate([np.linspace(R, 0, 250), np.linspace(0, R, 250)]) # 计算对应的npiez(X非负,无需abs) s = Q * np.log(R / x) / (2 * np.pi * T) npiez = h0 - s fig, ax = plt.subplots() ax.plot(x, npiez) # 设置目标刻度 ax.set_xticks([200, 100, 0, 100, 200]) plt.show()
两种方法都能得到你想要的图形效果,方法1更贴合你的原代码逻辑,无需修改数据生成流程。
内容的提问来源于stack exchange,提问作者Hanri Yago
相关产品推荐
相关产品推荐

