我有一个pandas数据框,其中我正在将12个列中的两个列绘制出来,一个作为x轴,另一个作为y轴。x轴是一个时间序列,y轴的值大约在-5000到5000之间随机取整数。
是否有办法只使用这两列创建散点图,其中y轴的正值是一种颜色,负值是另一种颜色?
我尝试了很多变化,但什么都做不来。我尝试了发散的颜色映射、colormeshs,使用seaborn colormaps和针对正/负数字的布尔掩码。我已经无计可施了。
我有一个pandas数据框,其中我正在将12个列中的两个列绘制出来,一个作为x轴,另一个作为y轴。x轴是一个时间序列,y轴的值大约在-5000到5000之间随机取整数。
是否有办法只使用这两列创建散点图,其中y轴的正值是一种颜色,负值是另一种颜色?
我尝试了很多变化,但什么都做不来。我尝试了发散的颜色映射、colormeshs,使用seaborn colormaps和针对正/负数字的布尔掩码。我已经无计可施了。
使用 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()
将数据框分割并分别绘制:
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()
如果您想将负数的数据框绘制成正数,请输入df.minus.y = -df_minus.y
。