大熊猫情节与正值一种颜色和负值另一种

时间:2017-04-24 04:05:55

标签: python pandas matplotlib plot

我有一个pandas数据框,我在12中绘制两列,一个作为x轴,一个作为y轴。 x轴只是一个时间序列,y轴是粗略的-5000到5000之间的随机整数。

有没有办法只使用这两列来制作散点图,其中y的正值是某种颜色,而负颜色是另一种颜色?

我尝试了很多变化,但无法实现。我尝试使用seaborn colormaps和booleans mask为delta / positive数字分散颜色映射,colormeshs。我在我的智慧结束。

3 个答案:

答案 0 :(得分: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()

scatter plot colored according to postive and negative vlaues

答案 1 :(得分:0)

使用boolean masking和where关键字制作2个独立的数据帧。条件是如果> 0或不是。然后逐个绘制两个数据帧,一个在另一个顶部,并使用不同的颜色参数。

答案 2 :(得分: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

如果您希望绘制负数据帧为正写df.minus.y = -df_minus.y