seaborn:stripplot如何根据值为各个点着色

时间:2019-08-06 14:30:36

标签: python-3.x pandas matplotlib seaborn

我正在尝试根据定义的值为seaborn:stripplot上的特定点着色。例如,

value=(df['x']=0.0

我知道您可以使用regplot等执行此操作,

df['color']= np.where( value==True , "#9b59b6")scatter_kws={'facecolors':df['color']}

有没有办法为pair gridstripplot做这件事?具体来说,要为下面的t1t2中的指定值着色?

我也尝试过在match中传递hue var。但是,下面产生的这张图片#2并不是我想要的。

这里是df

par        t1         t2    found   
30000.0   0.50       0.45     yes   
10000.0   0.30       0.12     yes   
3000.0    0.40       0.00     no    

这是我的代码:

# Import dependencies
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

df = pd.read_csv("data.csv")

# Make the PairGrid
g = sns.PairGrid(df.sort_values("par", ascending=True),
                 x_vars=df.columns[1:3], y_vars=["par"], 
                 height=5, aspect=.65)

# Draw a dot plot using the stripplot function
g.map(sns.stripplot, size=16, orient="h", 
      linewidth=1, edgecolor="gray", palette="ch:2.5,-.2,dark=.3")

sns.set_style("darkgrid")

# Use the same x axis limits on all columns and add better labels
g.set(xlim=(-0.1, 1.1), xlabel="% AF", ylabel="")

# Use semantically meaningful titles for the columns
titles = ["Test 1", "Test 2"]

for ax, title in zip(g.axes.flat, titles):

    # Set a different title for each axes
    ax.set(title=title)

    # Make the grid horizontal instead of vertical
    ax.xaxis.grid(False)
    ax.yaxis.grid(True)

sns.despine(left=True, bottom=True)

我正在尝试用value=0.0为点涂另一种颜色:

enter image description here

match变量传递到hue中将产生以下内容,并删除第三个par=3000值并折叠图。我可以对要突出显示的其他颜色进行分类。但是,离群值已从y轴移除,并且图已折叠。

enter image description here

1 个答案:

答案 0 :(得分:0)

您确定要使用stripplot吗?在我看来,您实际上是在尝试绘制scatterplot

另外,我认为您想使用FacetGrid而不是PairGrid?在这种情况下,它需要将您的数据框转换为“长格式”。

这就是我得到的:

df2 = df.melt(id_vars=['par','found'], var_name='Test', value_name='AF')

g = sns.FacetGrid(data=df2, col='Test', col_order=['t1','t2'], hue='found',
                  height=5, aspect=.65)

g.map(sns.scatterplot, 'AF','par',
      s=100, linewidth=1, edgecolor="gray", palette="ch:2.5,-.2,dark=.3")

enter image description here