You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-02111-1307, USA. */
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+02110-1301, USA. */
-#include <config.h>
+#include "config.h"
#include "chart.h"
#include <float.h>
#include <assert.h>
#include <stdio.h>
#include "str.h"
#include "value-labels.h"
+#include "misc.h"
/* Pie charts of course need to know Pi :) */
#endif
-#define min(A,B) ((A>B)?B:A)
-
/* Draw a single slice of the pie */
-void
+static void
draw_segment(struct chart *ch,
double centre_x, double centre_y,
double radius,
const char *colour) ;
-/* Draw a pie chart */
+
+/* Draw a piechart */
void
-draw_piechart(struct chart *ch, const struct variable *var,
- const struct freq_tab *frq_tab)
+piechart_plot(const char *title, const struct slice *slices, int n_slices)
{
int i;
+ double total_magnetude=0;
+
+ struct chart *ch = chart_create();
- const int n_data = frq_tab->n_valid;
const double left_label = ch->data_left +
(ch->data_right - ch->data_left)/10.0;
);
- chart_write_title(ch, var->label ? var->label: var->name);
+ chart_write_title(ch, title);
-
- for (i = 0 ; i < n_data ; ++i )
+ for (i = 0 ; i < n_slices ; ++i )
+ total_magnetude += slices[i].magnetude;
+
+ for (i = 0 ; i < n_slices ; ++i )
{
static double angle=0.0;
- const struct freq frq = frq_tab->valid[i];
const double segment_angle =
- frq.c / frq_tab->valid_cases * 2 * M_PI ;
-
- char *label = val_labs_find (var->val_labs, frq.v );
- if ( !label )
- {
- static char l[20];
- snprintf(l,20,"%g",frq.v.f);
- label = l;
- }
+ slices[i].magnetude / total_magnetude * 2 * M_PI ;
const double label_x = centre_x -
radius * sin(angle + segment_angle/2.0);
pl_line_r(ch->lp, label_x, label_y,
left_label, label_y );
pl_moverel_r(ch->lp,0,5);
- pl_alabel_r(ch->lp,0,0,label);
+ pl_alabel_r(ch->lp,0,0,slices[i].label);
}
else
{
right_label, label_y
);
pl_moverel_r(ch->lp,0,5);
- pl_alabel_r(ch->lp,'r',0,label);
+ pl_alabel_r(ch->lp,'r',0,slices[i].label);
}
angle += segment_angle;
pl_filltype_r(ch->lp,0);
pl_fcircle_r (ch->lp, centre_x, centre_y, radius);
+ chart_submit(ch);
}
-
-
-void
+static void
fill_segment(struct chart *ch,
double x0, double y0,
double radius,
/* Fill a segment with the current fill colour */
-void
+static void
fill_segment(struct chart *ch,
double x0, double y0,
double radius,
/* Draw a single slice of the pie */
-void
+static void
draw_segment(struct chart *ch,
double x0, double y0,
double radius,
pl_restorestate_r(ch->lp);
}
+