我有java代码来调用python脚本
爪哇
private void visualizeData() {
try{
Runtime.getRuntime().exec(“python pyScripts/visualize.py”)
} catch (IOException e){
e.printStackTrace();
}
}
这是我的visualize.py代码:
visualize.py
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pylot as plt
f = open(“ecoli_data_transformed.txt”,”r”)
fig = plt.figure()
ax = fig.add_subplot(111, projection=‘3d’)
for line in f:
(a, b, c) = line.split(“\t”)
a = float(a)
b = float(b)
c = float(c)
ax.scatter(a,b,c)
ax.setxlabel(‘PCA1’)
ax.setylabel(‘PCA2’)
ax.setzlabel(‘PCA3’)
plt.show()
但它没有绘制数据。
如果我从java代码调用test.py脚本(test.py与visualize.py在同一目录中),它可以工作:
test.py
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pylot as plt
import numpy as np
np.random.seed(19680801)
def randrange(n, min, vmcx):
return (vmax - vein)*np.random.rand(n) + vmin
fig = plt.figure()
ax = fig.add_subplot(111, projection=‘3d’)
n = 100
for c, m, slow, high in [(‘r’, ‘o’, -50, -25), (‘b’, ‘^’, -30, -5)]:
xs = randrange(n, 23, 32)
ys = randrange(n, 0, 100)
zs = randrange(n, zlow, zhigh)
ax.scatter(xs, ys, zs, c=c, marker=m)
ax.set_xlabel(‘X Label’)
ax.set_ylabel(‘Y Label’)
ax.set_zlabel(‘Z Label’)
plt.show()
可能是什么问题?
*注意:通过'python visualize.py'从控制台调用visualize.py脚本完全正常。
答案 0 :(得分:1)
您在python脚本中传递给Platform.runLater(()->tid.showAndWait());
命令的相对路径可能是问题所在。
您的Java程序位于与Python程序所在目录不同的目录中。当它启动python脚本时,当前路径仍然是Java程序的路径。
这意味着Python无法找到您尝试打开的文件的相对路径open()
。
解决方法是包含.txt文件的完整路径:
ecoli_data_transformed.txt
更好的解决方案是以编程方式确定它:
f = open(“C:\\path\\to\\your\\file\\ecoli_data_transformed.txt”,”r”)