2017-04-24 69 views
2

我有一个熊猫数据框,我在绘制12列中的两列,一列为x轴,一个为y轴。 x轴简单地是一个时间序列,而y轴是大致在-5000和5000之间的随机整数。熊猫绘制正值一种颜色和负值另一种

有没有什么办法可以只使用这2列进行散点图,其中y的正值是某种颜色而负值是另一种颜色?

我已经尝试了这么多的变化,但不能得到任何东西去。我尝试使用seaborn colormaps和布尔值作为负数/正数的分色图,colormeshs。我不知道该怎么做。

+0

http://matplotlib.org/examples/pylab_examples/color_by_yvalue.html –

回答

2

使用颜色映射为分散点着色的想法是合理的。如果您使用的是plt.scatter图,则可以提供颜色图在c参数中根据哪个值选择颜色的值。

在这里你只需要两个值,所以c= np.sign(df.y)将是一个合适的选择。

import matplotlib.pyplot as plt 
import numpy as np 
import pandas as pd 

df = pd.DataFrame({'x': np.arange(25), 'y': np.random.normal(0,2500,25)}) 
fig, ax = plt.subplots() 

ax.scatter(df.x, df.y, c=np.sign(df.y), cmap="bwr") 

plt.show() 

enter image description here

0

通过使用布尔值掩码和where关键字来生成2个独立的数据帧。条件将是如果> 0或不。然后将两个数据帧一个接一个,另一个接一个地排列,并使用颜色的不同参数。

0

拆分数据帧,并分别绘制出来:

import matplotlib.pylab as plt 
import numpy as np 
import pandas as pd 

df = pd.DataFrame({'x': np.arange(20), 'y': np.random.randn(20)}) 
# split dataframes 
df_plus = df[df.y >= 0] 
df_minus = df[df.y < 0] 
print df_plus 
print df_minus 

fig = plt.figure() 
ax = fig.add_subplot(1, 1, 1) 
# plot scatter 
ax.scatter(df_plus.x, df_plus.y, color='r') 
ax.scatter(df_minus.x, df_minus.y, color='b') 
ax.autoscale() 
plt.show() 

enter image description here

如果你想绘制负datframe为正写df.minus.y = -df_minus.y

相关问题