我有一些临床数据,其中包含多个受试者多次就诊的值。我创建了一个脚本来循环并为包含每次访问值的每个主题创建一个图。现在,我需要向每个主题图添加数据:
对于每个主题,添加一个新的标记(星号)以仅识别基线值(bcva_OS和bcva_OD)。我只能让它显示所有值的标记。如何仅将基线作为子集?请参阅代码中的注释。如果使用以下命令,则会收到语法错误:
plt.plot_date(sub_df['visit_date'] if sub_df[sub_df.visit_label == 'Visit 2 - Baseline'],
对于每个主题,我如何添加一个全新的数据类型,以便将两种数据类型叠加在每个主题的绘图上?我想只用一个主题的数据就可以做到这一点,但是循环又一次...
示例代码:
for subject, sub_df in new_od_df.groupby(by='subject'):
# Plot fellow eye
plt.plot(sub_df['visit_date'], sub_df['bcva_OS'], marker='^',
label='OS (fellow) ', color=sns.xkcd_rgb['pale red'])
# Plot treated eye
plt.plot(sub_df['visit_date'], sub_df['bcva_OD'], marker='o',
label='OD (treated) ', color=sns.xkcd_rgb['denim blue'])
# Trying to plot only the baseline values
#plt.plot_date(sub_df['visit_date'] if sub_df[sub_df.visit_label == 'Visit 2 - Baseline'],
# Plot fellow eye
plt.plot_date(sub_df['visit_date'], sub_df['bcva_OS'],
marker='*', markersize=10,
label='BL (fellow) ', color=sns.xkcd_rgb['light pink'])
# Plot treated eye
plt.plot_date(sub_df['visit_date'], sub_df['bcva_OD'],
marker='*', markersize=10,
label='BL (treated) ', color=sns.xkcd_rgb['baby blue'])
# Legend the old way
plt.legend(bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0)
# Display each chart separately
plt.show()
样本数据:
subject treated_eye visit_label visit_date bcva_OD bcva_OS refract_OD refract_OS
index
108 1101 OD Visit 1 - Screening 2016-01-07 27.0 41.0 + 5 + 0.75 X 27 + 5 + 1.75 X 45
115 1101 OD Visit 2 - Baseline 2016-01-25 35.0 41.0 + 5 + 0.75 X 27 + 5.5 + 1.75 X 40
120 1101 OD Baseline - VA Session 2 2016-01-25 35.0 41.0 + 5 + 0.75 X 27 + 5.5 + 1.75 X 40
125 1101 OD Visit 4 - Day 1 2016-02-02 32.0 42.0 + 5 + 0.75 X 27 + 5 + 1.75 X 30
123 1101 OD Visit 5 - Day 7 2016-02-08 40.0 43.0 + 5 + 0.75 X 28 + 5 + 1.75 X 30
111 1101 OD Visit 6 - Day 14 2016-02-16 33.0 44.0 + 5 + 0.75 X 27 + 5 + 1.75 X 40
124 1101 OD Unscheduled 2016-02-24 37.0 44.0 + 4.5 + 1.25 X 30 + 5 + 1.75 X 40
118 1101 OD Visit 7 - Month 1 2016-02-29 37.0 40.0 + 4.5 + 1.25 X 30 + 5 + 1.75 X 43
示例图:
答案 0 :(得分:0)
注意:这是对第1点的部分答案。
我不确定我是否完全理解您的请求,尤其是关于第2点:创建新的数据类型。请修改您的问题以使第2点更加清晰。现在,我猜测,您想在减去基线后绘制OD和OS值,这是正确的吗?
关于点1,以下解决方案可以正确获取基线值并将其绘制为虚线。请注意,在使用<?php
$args = array(
'numberposts' => 5,
'offset' => 0,
'category' => '',
'orderby' => 'post_date',
'order' => 'DESC',
'include' => '',
'exclude' => '',
'meta_key' => '',
'meta_value' =>'',
'post_type' => 'post',
'post_status' => 'draft, publish, future, pending, private',
'suppress_filters' => true
);
$recent_posts = wp_get_recent_posts( $args, ARRAY_A );
foreach($recent_posts as $post):
$categories = get_the_category($post['ID']);
foreach ($categories as $category):
if ($category->cat_name == 'firstcategory'):
//first category found
var_dump($category->cat_name);
endif;
if ($category->cat_name == 'secondcategory'):
//second category found
var_dump($category->cat_name);
endif;
endforeach;
endforeach;
?>
正确创建图形之后,我还添加了图形标题并将对plt.
的调用更改为ax.
。稍后可能会派上用场,fig,ax=plt.subplots()
已要求这样做。
fig.autofmt_xdate()