gpt4 book ai didi

python - 在 Seaborn 中绘制具有类似于 "hue"的多个属性的图形

转载 作者:太空狗 更新时间:2023-10-29 18:08:01 24 4
gpt4 key购买 nike

我有以下名为 df 的示例数据集,其中阶段时间是到达那里的天数:

id stage1_time stage_1_to_2_time stage_2_time stage_2_to_3_time stage3_time
a 10 30 40 30 70
b 30
c 15 30 45
d

我编写了以下脚本来获取 stage1_time 对 CDF 的散点图:

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import scipy.stats as stats

dict = {'id': id, 'stage_1_time': [10, 30, 15, None], 'stage_1_to_2_time': [30, None, 30, None], 'stage_2_time' : [40, None, 45, None],'stage_2_to_3_time' : [30, None, None, None],'stage_3_time' : [70, None, None, None]}
df = pd.DataFrame(dict)

#create eCDF function
def ecdf(df):
n = len(df)
x = np.sort(df)
y = np.arange(1.0, n+1) / n
return x, y

def generate_scatter_plot(df):

x, y = ecdf(df)

plt.plot(x, y, marker='.', linestyle='none')
plt.axvline(x.mean(), color='gray', linestyle='dashed', linewidth=2) #Add mean

x_m = int(x.mean())
y_m = stats.percentileofscore(df.as_matrix(), x.mean())/100.0

plt.annotate('(%s,%s)' % (x_m,int(y_m*100)) , xy=(x_m,y_m), xytext=(10,-5), textcoords='offset points')

percentiles= np.array([0,25,50,75,100])
x_p = np.percentile(df, percentiles)
y_p = percentiles/100.0

plt.plot(x_p, y_p, marker='D', color='red', linestyle='none') # Overlay quartiles

for x,y in zip(x_p, y_p):
plt.annotate('%s' % int(x), xy=(x,y), xytext=(10,-5), textcoords='offset points')

#Data to plot
stage1_time = df['stage_1_time'].dropna().sort_values()

#Scatter Plot
stage1_time_scatter = generate_scatter_plot(pd.DataFrame({"df" : stage1_time.as_matrix()}))
plt.title('Scatter Plot of Days to Stage1')
plt.xlabel('Days to Stage1')
plt.ylabel('Cumulative Probability')
plt.legend(('Days to Stage1', "Mean", 'Quartiles'), loc='lower right')
plt.margins(0.02)

plt.show()

输出:

enter image description here

目前,我将所有达到 stage1 的人所花费的天数与其累积概率作图,但是我想要实现的是,当我作图时,散点图具有三种颜色:那些达到 stage1 并留在那里,那些移动到 stage2 的人,以及那些移动到 stage3 的人。我还想要图中数据的计数:# in stage1、# in stage2 和 # in stage3

请问有没有人可以协助到达那里?

仅供引用,目的是以此为基础,以便我还可以为 stage2_time 创建图表,其中到达 stage_3 的图表以不同的颜色突出显示。

最佳答案

您可以创建一个新列并使用它来存储最后阶段,然后使用这个新列为您的绘图着色。

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import scipy.stats as stats
import math

dict = {'id': id, 'Progressive_time': [10, 30, 15, None],'stage_1_to_2_time': [30, None, 30, None], 'Active_time' : [40,None, 45, None],'stage_2_to_3_time' : [30, None, None,None],'Engaged_time' : [70, None, None, None]}
df = pd.DataFrame(dict)

#create eCDF function
def ecdf(df, serie):
n = len(df)
df['x'] = np.sort(df[serie])
df['y'] = np.arange(1.0, n+1) / n
return df

def generate_scatter_plot(df,serie,nb_stage):
df=df.dropna(subset=[serie]).sort_values(by=[serie])
st=1
for i in range(1,nb_stage*2,2):
df.loc[df.iloc[:,i].notnull(),'stage']=st
st=st+1

df= ecdf(df, serie)
plt.plot(df.loc[df['stage'] == 1, 'x'], df.loc[df['stage'] == 1, 'y'], marker='.', linestyle='none',c='blue')
plt.plot(df.loc[df['stage'] == 2, 'x'], df.loc[df['stage'] == 2, 'y'], marker='.', linestyle='none',c='red')
plt.plot(df.loc[df['stage'] == 3, 'x'], df.loc[df['stage'] == 3, 'y'], marker='.', linestyle='none',c='green')
plt.axvline(df['x'].mean(), color='gray', linestyle='dashed', linewidth=2) #Add mean


x_m = int(df['x'].mean())
y_m = stats.percentileofscore(df[serie], df['x'].mean())/100.0

plt.annotate('(%s,%s)' % (x_m,int(y_m*100)) , xy=(x_m,y_m), xytext=(10,-5), textcoords='offset points')

percentiles= np.array([0,25,50,75,100])
x_p = np.percentile(df[serie], percentiles)
y_p = percentiles/100.0

plt.plot(x_p, y_p, marker='D', color='red', linestyle='none') # Overlay quartiles

for x,y in zip(x_p, y_p):
plt.annotate('%s' % int(x), xy=(x,y), xytext=(10,-5), textcoords='offset points')

#Scatter Plot
stage1_time_scatter = generate_scatter_plot(df,'stage_1_time',3)
plt.title('Scatter Plot of Days to Stage1')
plt.xlabel('Days to Stage1')
plt.ylabel('Cumulative Probability')
plt.legend(('Progressive','Active','Engaged','Days to Stage1', "Mean", 'Quartiles'), loc='lower right')
plt.margins(0.02)

plt.show()

关于python - 在 Seaborn 中绘制具有类似于 "hue"的多个属性的图形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50611171/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com