问题描述
我需要呈现一个线性 x 轴,这意味着时间点之间的距离需要与时间成比例。我已经完成了以下代码:
/*Produce mean +/- SD plot with line graph*/
proc sgplot data=adpc;
vline hours /response=value group=dose stat=mean limitstat=stderr;
xaxis label='Hours post dose';
yaxis label='Mean +/- SD';
run;
这是输出: x 轴具有变量小时,其值为 0、1、2、3、4、6、8、24(小时)。我认为与时间成比例,意味着它应该在观察之间具有相等的范围。例如,x 轴应该是 0,2,4,6,8,10,12,14,16,18,20,22,24(不确定时间比例是什么意思)。 我应该添加什么?
解决方法
这里的问题是 if (!empty($_POST)) {
$wpdb->query('START TRANSACTION');
//All this fields are repeatable inputs,except client_vat that can only be the 1st record. I think it's missing a foreach
$default = array(
'client_name' => $_POST['client_name'],'client_birth' => $_POST['client_birth'],'client_sns' => $_POST['client_sns'],'client_vat' => $_POST['client_vat'],'client_city' => $_POST['client_city'],'client_email' => $_POST['client_email'],'client_phone' => $_POST['client_phone']
);
$item = shortcode_atts( $default,$_REQUEST );
$addClients = $wpdb->insert( 'wp7s_g_clients',$item );
$default = array(
'test_client' => ???,//ID of previous client that have client_vat filled [0]
);
$item = shortcode_atts( $default,$_REQUEST );
$addTests = $wpdb->insert( 'wp7s_g_tests',$item );
$collectDate = date('Y-m-d H:i:s',strtotime($_POST['booking_collect_date']));
$default = array(
'booking_status' => 1,'booking_partner' => $_POST['booking_partner'],//ID of the partner,if not empty
'booking_client' => ???,//If partner don't exist -> ID of client that have client_vat filled
'booking_type' => $_POST['booking_type'],'booking_clients' => ???,//Array of all IDs previously added in wp7s_g_clients table
'booking_city' => $_POST['booking_city'],'booking_address' => $_POST['booking_address'],'booking_collect_date' => $collectDate,'booking_payment' => $_POST['booking_payment'],'booking_amount' => $_POST['booking_amount'],'booking_obs' => nl2br($_POST['booking_obs']),);
$item = shortcode_atts( $default,$_REQUEST );
$addBookings = $wpdb->insert( 'wp7s_g_bookings',$item );
if($addClients && $addTests && $addBookings) {
$wpdb->query('COMMIT');
$msg = "Success";
wp_redirect( esc_url( get_page_link( 6 ) ) );
exit;
}
else {
$wpdb->query('ROLLBACK');
$msg = "Error";
}
}
是一个分类图 - 像条形图,但带有线条。所以X轴是一个分类轴!使分类轴成比例的唯一方法是不跳过任何类别。
最好使用 VLINE
或类似的,它使用数字轴。
这是一个使用合成数据(请在将来提供!)和一个 HIGHLOW 来添加条形的示例。
series
,
您是否尝试过在 XAXIS 语句中明确指定值?
您需要将它们全部列出,但这应该会给您一个想法:
xaxis label='Hours post dose' values = ("0" "2" "4" "6" "8" "10" "12" ... "24");
编辑:这个使用来自@Joe 的假数据的更简化版本效果很好。
data adpc;
call streaminit(7);
do dose = 1,5,10,100;
do _i = 1 to 100;
hours = rand('Integer',1,8);
if hours in (5,7) then hours=24;
value = rand('Uniform')*100*log(dose+1);
output;
end;
end;
run;
proc sgplot data=adpc;
vline hours /response=value group=dose stat=mean limitstat=stderr;
xaxis label='Hours post dose' values = (0 to 24 by 2);
yaxis label='Mean +/- SD';
run;
,
将选项 type=time
添加到您的 XAXIS
语句中。您还需要使用 values=
选项来明确说明要勾选的剂量值。
示例:
proc sgplot data=have;
vline hours /response=value group=dose stat=mean limitstat=stderr;
xaxis label='Hours post dose'
type=time values=(0 to 4,6,8,24) /* added to xaxis statement */
;
yaxis label='Mean +/- SD';
run;
完整示例:
data have;
call streaminit(2021);
do patid = 1 to 500;
dose = int( (patid-1) / (500/4) );
do hours = 0 to 4,24;
select (dose);
when (0) value = hours/24 * 25;
when (1) value = hours/24 * 45;
when (2) value = ifn (hours<6,hours/6 * 100,100 - hours/24 * 25);
when (3) value = ifn (hours<6,hours/6 * 250,250);
otherwise;
end;
base = value;
jitter = rand('uniform') * hours;
value = min(jitter * value,250);
output;
end;
end;
run;
ods html file='vline.html';
proc sgplot data=have;
vline hours /response=value group=dose stat=mean limitstat=stderr;
xaxis label='Hours post dose' type=time values=(0 to 4,24);
yaxis label='Mean +/- SD';
run;
ods html close;
生产