matplotlib 3D 绘图按值范围进行颜色编码

Joe*_*oey 4 python matplotlib pandas

我正在尝试生成具有两种颜色的 3D 绘图。一种颜色表示大于零的值,另一种颜色表示小于零的值。我只是不知道如何在代码中实现这一点。

这是我当前的代码:

from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
import matplotlib.pyplot as plt
import matplotlib.tri as mtri
import pandas as pd
import numpy as np

df = pd.DataFrame.from_csv('...temp\\3ddata.csv', sep = ',', index_col  = False)

fig = plt.figure()
ax = fig.gca(projection='3d')

x = df['P']
y = df['T']
z = df['S']

ax.plot(x, y, zs= 0, zdir = 'z', c= 'r')

ax.scatter(x,y, z, c = 'b', s = 20)

ax.set_xlabel('Pressure (Bar)')
ax.set_zlabel('Residual subcooling (J*Kg-1*K-1')
ax.set_ylabel('Temperaure of LNG (K)')

plt.show()
Run Code Online (Sandbox Code Playgroud)

三维绘图

我已经阅读了一些示例,但无法将它们应用到我的数据中。是否可以用 for 循环来做到这一点?

或者类似的东西:

use_c = {<=0: "red", >=0 "blue"}

#ax.plot(x, y, zs= 0, zdir = 'z', c= 'r')

ax.scatter(x,y, z, c = [use_c[x[0]] for x in z], s = 20)
Run Code Online (Sandbox Code Playgroud)

将 z 值与颜色联系起来的东西。

Joe*_*oey 5

我已经想通了,唉。

我需要为 c 指定一个变量,然后在 ax.scatter(*kwargs) 中引用它:

c = (z<=0)

ax.scatter(x,y,z, c = c, cmap = 'coolwarm', 大小 = 30)

这给了我一个很好的情节,如下所示:在此输入图像描述