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

时间:2016-04-04 14:30:40

标签: python pandas matplotlib

我正在尝试用两种颜色制作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()

3DPLOT

我已经阅读了一些示例,但无法将其应用于我的数据。是否可以使用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)

将z的值与颜色相关联的东西。

3 个答案:

答案 0 :(得分:2)

如果传递给c一个布尔数组作为可选参数ax.scatter(x,y, z, c = z<0, s = 20) 的值, 你可以从当前色彩图的极端中选择两种颜色的点

{{1}}

您可能希望将边缘宽度设置为零,否则所有点看起来几乎都是黑色。

答案 1 :(得分:1)

我已经弄明白了。

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

c =(z <= 0)

ax.scatter(x,y,z,c = c,cmap =&#39; coolwarm&#39;,size = 30)

这给了我一个很好的情节如下:enter image description here

答案 2 :(得分:0)

以下是一些示例代码,演示如何使用散点图应用颜色贴图。

import matplotlib.cm as cm
plt.scatter(x, y, c=t, cmap=cm.colormap_name)

其中t是某个值,您想根据颜色设置颜色。

您可以在此处找到完整的色彩映射列表:

http://matplotlib.org/examples/color/colormaps_reference.html

取自:

Scatter plot and Color mapping in Python