2016-04-04 6 views
1

Я пытаюсь создать трехмерный сюжет с двумя цветами. Один цвет для значений выше нуля и другой цвет для значений ниже нуля. Я просто не могу понять, как реализовать это в коде.matplotlib Трехмерное кодирование цвета по диапазону значений

Вот мой текущий код:

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) 

Что-то, что связывает значение г к цвету.

+0

Вы можете попробовать использовать сейсмическую палитру http://matplotlib.org/users/colormaps .html – JeD

+0

Какое значение, y или z? –

ответ

1

Я понял это, увы.

мне нужно задать переменную для C затем ссылаться на это в ax.scatter (* kwargs):

С = (г < = 0)

ax.scatter (х, у, г , с = с, CMAP = 'coolwarm', размер = 30)

это дает мне хороший участок следующим образом: enter image description here

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

+0

К сожалению, это для 2D-диаграмм. – Joey

+0

Простите, я предположил, что это работает так же. Кажется, это немного сложнее. Вы видели этот вопрос? http://stackoverflow.com/questions/15053575/python-3d-scatterplot-colormap-issue – bamdan

2

, если вы передаете scatter булево массив в качестве значения необязательного аргумента c, у вас есть свои очки в двух цветах от крайних значений текущей цветовой карты

ax.scatter(x,y, z, c = z<0, s = 20) 

Возможно, вы захотите установить ширину ребра на ноль, иначе все точки выглядят почти черными.

Смежные вопросы