我有一个pandas数据框,我在12中绘制两列,一个作为x轴,一个作为y轴。 x轴只是一个时间序列,y轴是粗略的-5000到5000之间的随机整数。
有没有办法只使用这两列来制作散点图,其中y的正值是某种颜色,而负颜色是另一种颜色?
我尝试了很多变化,但无法实现。我尝试使用seaborn colormaps和booleans mask为delta / positive数字分散颜色映射,colormeshs。我在我的智慧结束。
答案 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()
答案 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()
如果您希望绘制负数据帧为正写df.minus.y = -df_minus.y
。