带正值的Pandas绘图用一种颜色,带负值的用另一种颜色

5

我有一个pandas数据框,其中我正在将12个列中的两个列绘制出来,一个作为x轴,另一个作为y轴。x轴是一个时间序列,y轴的值大约在-5000到5000之间随机取整数。

是否有办法只使用这两列创建散点图,其中y轴的正值是一种颜色,负值是另一种颜色?

我尝试了很多变化,但什么都做不来。我尝试了发散的颜色映射、colormeshs,使用seaborn colormaps和针对正/负数字的布尔掩码。我已经无计可施了。


http://matplotlib.org/examples/pylab_examples/color_by_yvalue.html - Paul H
3个回答

6

使用 colormap 为散点着色的想法当然是有道理的。如果您使用 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


2

将数据框分割并分别绘制:

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


(注:本翻译版权归机器助手所有,仅供参考,不得用于商业盈利。)

0
使用布尔掩码和where关键字创建2个单独的数据框。条件是如果>0或不是。然后逐个绘制两个数据框,一个在另一个上面,颜色参数不同。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接