2017-03-25 62 views
1

我一直在尋找如何在根據「第三方」列的值散點圖設置點的解決方案。我找不到任何現成的解決方案,因此我構建了自己的,我想分享它(也許有人會使用它):) 如果這不是一個地方發佈它,那麼我很抱歉並請刪除它。熊貓/ Python的/ Matplotlib散點圖標記的顏色取決於值從細胞

讓我們假設有一個數據幀「scatterData」如下:

lad2014_name Male Female Result 
0 ABERDEEN CITY 95154 97421 -21.78 
1 ABERDEENSHIRE 101875 105141 -13.10 
2 ADUR 24047 26574 -16.16 
3 ALLERDALE  38346 40192 -44.56 
. 
. 
. 
499 AMBER VALLEY 48720 51502 -3.56 

我想繪製男性和女性在散點圖上,但是我也想顯示「結果」是否爲負或通過改變標記的顏色爲正。所以我這樣做:

def resultColour(z): 
    colour = '#e31a1c' 
    if z > 0: 
     colour = '#1f78b4' 
    return colour 

#Plotting the scatter plot 
plt.figure(figsize=(12,10)) 

for index, row in scatterData.iterrows(): 
    x = row.Male 
    z = row.Result 
    y = row.Female 
    t = resultColour(z) 
    plt.scatter(x, y, c=t,s=85) 
plt.xlabel('X axis lable',fontsize=15) 
plt.ylabel('Y axis lable',fontsize=15) 

plt.title('Plot title',fontsize=18) 

plt.plot() 

它產生散射如下

Scatter plot

回答

0

實際上,你可以爲plt.scatterc關鍵字參數提供值的數組。它們將根據可使用cmap關鍵字設置的色彩映射映射到標記顏色。

實施例:

import pandas as pd 
import numpy as np 
from matplotlib import pyplot as plt 
from matplotlib import cm 

np.random.seed(0) 
df = pd.DataFrame({'x':np.random.randint(0,10,size=20), 
        'y':np.random.randint(0,10,size=20), 
        'z':np.random.uniform(-1,1,size=20)}) 

plt.figure(figsize=(5,5)) 
plt.scatter(df.x, df.y, c = df.z>0, cmap = cm.RdYlGn) 

可生產

a colored scatterplot

cm模塊具有大的selection of colormaps。如果你需要自己的確切顏色,那麼你可以使用像這樣列出的色彩地圖:

cmap = matplotlib.colors.ListedColormap(['#e31a1c','#1f78b4']) 
plt.scatter(df.x, df.y, c = df.z>0, cmap = cmap) 
+0

謝謝。這確實產生了與我的解決方案相同的結果,但更簡單和優雅。 – Sylvekk