Matlab与R绘图结果不一致,如何调整导出的边界坐标表
问题根源
Matlab处理图像时默认使用图像坐标系,Y轴原点在左上角,数值向下递增;而R、Excel、JMP等通用数据分析工具默认使用标准笛卡尔坐标系,Y轴原点在左下角,数值向上递增,两者Y轴方向相反,是绘图异常的核心原因。
最优解决方案(Matlab端预处理,一次导出全工具通用)
修改Matlab代码中Y坐标的赋值逻辑,导出前直接完成Y轴翻转,修改后的核心代码段如下:
b = B{k}; c = stat(k).Centroid; y_raw = b(:,1); % 翻转Y坐标适配标准笛卡尔坐标系 y = max(y_raw) - y_raw + 1; x = b(:,2); plot(x,y, 'g', 'linewidth', 2); T=table(x,y) writetable(T,'E:/t.csv')
处理后导出的csv文件,在R、Excel、JMP等工具中直接读取x、y列绘图,即可得到和Matlab完全一致的效果。
备选方案:无需修改Matlab导出结果,在绘图端适配
R端适配代码(二选一即可)
- 直接修改原始坐标值:
csv_data<-read.csv("E:/t.csv") # 翻转Y坐标 csv_data$y <- max(csv_data$y) - csv_data$y + 1 plot(x = csv_data$x, y = csv_data$y, xlab = "X", ylab = "Y")
- 不修改数据,仅反转绘图Y轴范围:
csv_data<-read.csv("E:/t.csv") plot(x = csv_data$x, y = csv_data$y, xlab = "X", ylab = "Y", ylim = rev(range(csv_data$y)))
Excel/JMP端适配方法
在绘图设置中找到Y轴选项,勾选「反转Y轴」/「逆序刻度值」即可,不需要修改原始坐标数据。
内容的提问来源于stack exchange,提问作者lroca
相关产品推荐
相关产品推荐

