如何为含复数的R数据框绘制保留虚部的散点图?
R语言绘制含复数2×2数据框散点图的实现方法
使用R语言绘制数据框散点图时,若单元格包含复数,默认plot函数会丢弃虚部,无法满足复数场景的可视化需求。
无复数场景常规实现
无复数的普通数值场景可直接使用如下代码绘制散点图:
noc_test <- data.frame("x" = c(0, 1), "y" = c(1, 0)) plot(x = noc_test[[1]], y = noc_test[[2]])
含复数场景的绘图需求
针对如下包含复数的2×2数据框,直接调用plot函数会丢失虚部信息:
c_test <- data.frame("x" = c(0, sqrt(-1+0i)), "y" = c(-sqrt(-1+0i), 0)) # 以下代码绘制的散点图会自动丢弃虚部 plot(x = c_test[[1]], y = c_test[[2]])
该需求来自实验项目,需要通用绘图方法适配2×2全复数数据框,可快速绘制2×2单位矩阵、3个泡利矩阵(已转R数据框格式)及其任意变换,用于验证变换对泡利矩阵的作用效果。
临时可用实现方案
目前可通过判断复数存在性、拆分实部虚部的方式实现需求,代码如下:
# 创建包含复数单元格的数据框 x <- data.frame("x" = c(0, sqrt(-1+0i)), "y" = c(-sqrt(-1+0i), 0)) # 判断是否存在非零虚部,分场景绘图 if (Im(x[[1]][[1]]) != 0 || Im(x[[2]][[1]]) != 0 || Im(x[[1]][[2]]) != 0 || Im(x[[2]][[2]]) != 0){ x <- data.frame(Re = c(Re(x[[1]][[1]]), Re(x[[2]][[1]]), Re(x[[1]][[2]]), Re(x[[2]][[2]])), Img = c(Im(x[[1]][[1]]), Im(x[[2]][[1]]), Im(x[[1]][[2]]), Im(x[[2]][[2]]))) plot(x = x[[1]], y = x[[2]], xlab = "实部", ylab = "虚部", main = "sig2", col = c("red", "red", "blue", "blue"), pch = c(1, 1, 4, 4)) } else { plot(x = x[[1]], y = x[[2]], xlab = "x2", ylab = "y2", main = "sig2") }
该方案当前可满足泡利矩阵变换的可视化需求,后续将优化为更通用的正式实现。
内容的提问来源于stack exchange,提问作者Mackson Ncube
相关产品推荐
相关产品推荐

