我有一个熊猫数据框,我在绘制12列中的两列,一列为x轴,一个为y轴。 x轴简单地是一个时间序列,而y轴是大致在-5000和5000之间的随机整数。熊猫绘制正值一种颜色和负值另一种
有没有什么办法可以只使用这2列进行散点图,其中y的正值是某种颜色而负值是另一种颜色?
我已经尝试了这么多的变化,但不能得到任何东西去。我尝试使用seaborn colormaps和布尔值作为负数/正数的分色图,colormeshs。我不知道该怎么做。
我有一个熊猫数据框,我在绘制12列中的两列,一列为x轴,一个为y轴。 x轴简单地是一个时间序列,而y轴是大致在-5000和5000之间的随机整数。熊猫绘制正值一种颜色和负值另一种
有没有什么办法可以只使用这2列进行散点图,其中y的正值是某种颜色而负值是另一种颜色?
我已经尝试了这么多的变化,但不能得到任何东西去。我尝试使用seaborn colormaps和布尔值作为负数/正数的分色图,colormeshs。我不知道该怎么做。
使用颜色映射为分散点着色的想法是合理的。如果您使用的是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()
通过使用布尔值掩码和where关键字来生成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()
如果你想绘制负datframe为正写df.minus.y = -df_minus.y
。
http://matplotlib.org/examples/pylab_examples/color_by_yvalue.html –