اذهب إلى المحتوى

السؤال

نشر

السلام عليكم

ده الكود

# Create a Kaplan-Meier object
kaplanmeierfitter = KaplanMeierFitter()

# Create a larger figure to avoid overlap
plt.figure(figsize=(12, 8))

# Iterate through each unique combination of 'cyto_score', 'tbi_status', 'graft_type', and 'vent_hist'
for (cyto_score, tbi_status, graft_type, vent_hist) in data_train.groupby(['cyto_score', 'tbi_status', 'graft_type', 'vent_hist']).groups:
    # Filter the data based on the current group
    group_data = data_train[(data_train['cyto_score'] == cyto_score) & 
                            (data_train['tbi_status'] == tbi_status) & 
                            (data_train['graft_type'] == graft_type) & 
                            (data_train['vent_hist'] == vent_hist)]
    
    # Fit the Kaplan-Meier model
    kaplanmeierfitter.fit(group_data['efs_time'], event_observed=group_data['efs'],
                          label=f'cyto_score {cyto_score}, tbi_status {tbi_status}, graft_type {graft_type}, vent_hist {vent_hist}')
    
    # Plot the survival function with a unique color for each group
    kaplanmeierfitter.plot_survival_function(color=plt.cm.tab10(group_data['cyto_score'] % 10))  # Using colormap for variety

# Customize the plot
plt.title('Kaplan-Meier Survival Curve')
plt.xlabel('Time (months)')
plt.ylabel('Survival Probability')
plt.legend()
plt.show()

 

Recommended Posts

  • 0
نشر

يمكنك تقسيم الرسوم البيانية إلى شبكة تحتوي على 4 رسومات باستخدام مكتبة matplotlib لإنشاء شبكة من المحاور، و  بهذه الطريقة يمكنك عرض الرسومات المختلفة بشكل مرتب في نافذة واحدة و يكون التعريف بهذا الشكل:

from matplotlib import pyplot as plt
from lifelines import KaplanMeierFitter

# Create a Kaplan-Meier object
kaplanmeierfitter = KaplanMeierFitter()

# تحديد الشبكة (2×2)
fig, axes = plt.subplots(2, 2, figsize=(15, 10))  # 2 صفوف × 2 أعمدة

# تحويل الشبكة إلى قائمة لتسهيل التكرار
axes = axes.flatten()

# Iterate through each unique combination of 'cyto_score', 'tbi_status', 'graft_type', and 'vent_hist'
groups = data_train.groupby(['cyto_score', 'tbi_status', 'graft_type', 'vent_hist']).groups

for i, (group_key, group_indices) in enumerate(groups.items()):
    # التوقف إذا تم رسم 4 رسومات فقط
    if i >= 4:
        break

    # Filter the data based on the current group
    group_data = data_train.loc[group_indices]
    
    # Fit the Kaplan-Meier model
    kaplanmeierfitter.fit(group_data['efs_time'], event_observed=group_data['efs'],
                          label=f'cyto_score {group_key[0]}, tbi_status {group_key[1]}, graft_type {group_key[2]}, vent_hist {group_key[3]}')
    
    # Plot on the corresponding subplot
    kaplanmeierfitter.plot_survival_function(ax=axes[i], color=plt.cm.tab10(group_data['cyto_score'] % 10))
    
    # Customize each subplot
    axes[i].set_title(f'Group: cyto_score {group_key[0]}, tbi_status {group_key[1]}')
    axes[i].set_xlabel('Time (months)')
    axes[i].set_ylabel('Survival Probability')

# تحسين المسافات بين الرسومات
plt.tight_layout()

# عرض الرسوم
plt.show()

هكذا يتم إنشاء شبكة من الرسومات باستخدام plt.subplots(2, 2) مما يعني 4 رسومات  أي 2 صفوف × 2 أعمدة، و أيضا استخدمنا axes.flatten() لتحويل المحاور إلى قائمة لتسهيل التكرار عليها، ثم نقوم بتحديد عدد الرسومات لا يزيد عن 4 باستخدام الشرط، و كل مجموعة يتم رسمها على المحور الخاص بها باستخدام ax=axes[i].

  • 0
نشر
بتاريخ 2 ساعة قال Ali Ahmed55:

السلام عليكم

ده الكود

# Create a Kaplan-Meier object
kaplanmeierfitter = KaplanMeierFitter()

# Create a larger figure to avoid overlap
plt.figure(figsize=(12, 8))

# Iterate through each unique combination of 'cyto_score', 'tbi_status', 'graft_type', and 'vent_hist'
for (cyto_score, tbi_status, graft_type, vent_hist) in data_train.groupby(['cyto_score', 'tbi_status', 'graft_type', 'vent_hist']).groups:
    # Filter the data based on the current group
    group_data = data_train[(data_train['cyto_score'] == cyto_score) & 
                            (data_train['tbi_status'] == tbi_status) & 
                            (data_train['graft_type'] == graft_type) & 
                            (data_train['vent_hist'] == vent_hist)]
    
    # Fit the Kaplan-Meier model
    kaplanmeierfitter.fit(group_data['efs_time'], event_observed=group_data['efs'],
                          label=f'cyto_score {cyto_score}, tbi_status {tbi_status}, graft_type {graft_type}, vent_hist {vent_hist}')
    
    # Plot the survival function with a unique color for each group
    kaplanmeierfitter.plot_survival_function(color=plt.cm.tab10(group_data['cyto_score'] % 10))  # Using colormap for variety

# Customize the plot
plt.title('Kaplan-Meier Survival Curve')
plt.xlabel('Time (months)')
plt.ylabel('Survival Probability')
plt.legend()
plt.show()

 

لديك استخدام غير صحيح ل groupby.groups وفلترة البيانات باستخدام الشروط أي من خلال الفلترة اليدوية للبيانات باستخدام شروط لكل مجموعة والأفضل استخدام الفهارس مباشرة:

for (cyto_score, tbi_status, graft_type, vent_hist), indices in data_train.groupby(['cyto_score', 'tbi_status', 'graft_type', 'vent_hist']).groups.items():
    group_data = data_train.loc[indices]

كما لديك خطأ في استخدام الألوان بسبب التعامل مع سلسلة بدلا من قيمة مفردة group_data['cyto_score'] لذا يمكنك استخدام cyto_score مباشرة:

color=plt.cm.tab10(cyto_score % 10)

كما أنك تقوم برسم كل المنحنيات على نفس الرسم بدلا من استخدام شبكة وهذا ما تسبب في ازدحام المنحنيات في رسم واحد لذا استخدم شبكة فرعية (subplots) لكل مجموعة

fig, axes = plt.subplots(2, 2, figsize=(12, 8))
kaplanmeierfitter.plot_survival_function(ax=axes[row, col])

ثم يمكنك تحديد عدد الفئات التي سيتم رسمها:

if i >= len(axes):
    break

وإضافة نطاقات الثقة عند الرسم:

kaplanmeierfitter.plot_survival_function(ci_show=True)

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...