2017-04-24 68 views
2

我有一個熊貓數據框,我在繪製12列中的兩列,一列爲x軸,一個爲y軸。 x軸簡單地是一個時間序列,而y軸是大致在-5000和5000之間的隨機整數。熊貓繪製正值一種顏色和負值另一種

有沒有什麼辦法可以只使用這2列進行散點圖,其中y的正值是某種顏色而負值是另一種顏色?

我已經嘗試了這麼多的變化,但不能得到任何東西去。我嘗試使用seaborn colormaps和布爾值作爲負數/正數的分色圖,colormeshs。我不知道該怎麼做。

+0

http://matplotlib.org/examples/pylab_examples/color_by_yvalue.html –

回答

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() 

enter image description here

0

通過使用布爾值掩碼和where關鍵字來生成2個獨立的數據幀。條件將是如果> 0或不。然後將兩個數據幀一個接一個,另一個接一個地排列,並使用顏色的不同參數。

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

如果你想繪製負datframe爲正寫df.minus.y = -df_minus.y

相關問題