Speedometer Colorplot (xfig example)
Jump to navigation
Jump to search
“Speedometer”-like colormap for data points
variable width=10, height=10;
variable xfig = xfig_plot_new(width,height);
xfig.world(0, 10, 0, 10);
variable data = struct{ x=[1:9:1], y=[7:7:#9], z=[1:9:1] }; % data to be plotted; the z-component will be color-coded
% --------------------------------
% define colormap for z-component:
variable z_min = nint(min(data.z)), z_max = nint(max(data.z)); % nint -> cast to nearest integer, which is useful for labels
while(pos_modulo(z_max,4)!=0){z_max++;} % ensures that z_max is a multiple of 4, which is useful if there are four plus one major ticmarks (see below)
define define_z_color(z)
{
variable fraction = (1.*(z-z_min)/(z_max-z_min));
if(fraction<1/4.)
return xfig_mix_colors("red","gold",fraction*4);
else if(1/4.<=fraction<2/4.)
return xfig_mix_colors("green","red",(fraction-1/4.)*4);
else
return xfig_mix_colors("blue","green",(fraction-2/4.)*4);
}
% --------------------------------
% ------------------------------
% plot colormap for z-component:
variable position_z_label = [0.05,0.07]; % position of the color "speedometer" in the plot
xfig_plot_text( xfig, "$z$"R, position_z_label[0], position_z_label[1], 0, 0; depth=1, world0);
variable angle_step = PI/2./z_max;
variable i, z_color;
_for i(0, z_max, 1)
{
z_color = define_z_color(i);
% "major ticmarks":
if(i==0 or i==z_max/4 or i==z_max/2 or i==z_max*3/4 or i==z_max)
{
xfig.plot( position_z_label[0]+cos(angle_step*i)*[0.05,0.3]/width*height, position_z_label[1]+sin(angle_step*i)*[0.05,0.3]; color=z_color, depth=0, world0);
xfig_plot_text( xfig, sprintf("$%d$"R,i), position_z_label[0]+cos(angle_step*i)*0.35/width*height, position_z_label[1]+sin(angle_step*i)*0.35, 0, 0;
depth=1, world0, rotate=angle_step*i*180/PI, color=z_color);
}
% "minor ticmarks"
else
xfig.plot( position_z_label[0]+cos(angle_step*i)*[0.05,0.275]/width*height, position_z_label[1]+sin(angle_step*i)*[0.05,0.275]; color=z_color, depth=0, world0);
}
% ------------------------------
% -----------------------------
% plot color-coded data points:
_for i(0, length(data.x)-1, 1)
{
z_color = define_z_color(data.z[i]);
xfig.plot(data.x[i], data.y[i]; color=z_color, fill=20, fillcolor=z_color, sym="square", size=2);
}
% -----------------------------
xfig.render("colored_data_points.pdf");