Re: GtkPlot



Attached below is a simple example. Something that you should keep in mind
is that gtkplot expects you to keep the data around as long as the plot is
displayed, i.e. it accepts a pointer to the data, but it does not copy it.
Presumably for perfomance reasons.

Regards,
Dov

#include <gtk/gtk.h>

#include <gtkextra/gtkextra.h>

#include <math.h>

 GtkWidget *w_top;

GtkPlotData *dataset;

 void

build_example1(GtkWidget *plot)

{

    GdkColor color;

     static gdouble px1[]={0., 0.2, 0.4, 0.6, 0.8, 1.0};

    static gdouble py1[]={.2, .4, .5, .35, .10, .40};

     dataset = GTK_PLOT_DATA(gtk_plot_data_new());

    gtk_plot_data_set_points(dataset, px1, py1, NULL, NULL, 6);

     gdk_color_parse("red", &color);

     gtk_plot_data_set_symbol(dataset,

                             GTK_PLOT_SYMBOL_DIAMOND,

                             GTK_PLOT_SYMBOL_EMPTY,

                             10, 2, &color, &color);

    gtk_plot_data_set_line_attributes(dataset,

                                      GTK_PLOT_LINE_SOLID,

                                      (GdkCapStyle)0,

                                      (GdkJoinStyle)0,

                                      2, &color);

     gtk_plot_data_set_connector(dataset, GTK_PLOT_CONNECT_STRAIGHT);

     gtk_plot_data_hide_legend(dataset);

    gtk_plot_add_data(GTK_PLOT(plot), dataset);

    gtk_widget_show(GTK_WIDGET(dataset));

}

 // This signal handler resizes the graph if its allocation was changed

int plot_expose_event(GtkWidget *canvas,

                      GdkEventConfigure *event,

                      gpointer user_data)

{

    int width = canvas->allocation.width;

    int height = canvas->allocation.height;

     if (width != GTK_PLOT_CANVAS(canvas)->width

        || height != GTK_PLOT_CANVAS(canvas)->height) {

        gtk_plot_canvas_set_size(GTK_PLOT_CANVAS(canvas),

                                 width, height);

        gtk_plot_canvas_paint(GTK_PLOT_CANVAS(canvas));

    }

     return 0;

}

 GtkWidget *create_plot()

{

    GtkWidget *w_plot_canvas, *w_plot;

    GtkPlotCanvasChild *child;

    GtkPlotAxis *x_axis, *y_axis;

     w_plot_canvas = gtk_plot_canvas_new(500,300,1.0);

     // Do this in order to have auto resize of plot with window.

    GTK_PLOT_CANVAS_UNSET_FLAGS (GTK_PLOT_CANVAS (w_plot_canvas),

                                 GTK_PLOT_CANVAS_DND_FLAGS);

    GTK_PLOT_CANVAS_SET_FLAGS (GTK_PLOT_CANVAS (w_plot_canvas),

                               GTK_PLOT_CANVAS_CAN_RESIZE);

     w_plot = gtk_plot_new(NULL);

     gtk_plot_set_range(GTK_PLOT(w_plot), 0, 1., -1., 1.4);

    gtk_plot_axis_set_ticks(gtk_plot_get_axis(GTK_PLOT(w_plot),

                                              GTK_PLOT_AXIS_LEFT),

                            0.5,5);

    child = gtk_plot_canvas_plot_new(GTK_PLOT(w_plot));

    gtk_plot_canvas_put_child(GTK_PLOT_CANVAS(w_plot_canvas), child,

                              .10, .1, .9, .85);

     // Setup the axis

    gtk_plot_set_legends_border(GTK_PLOT(w_plot), (GtkPlotBorderStyle)0, 0);

    gtk_plot_axis_set_visible(gtk_plot_get_axis(GTK_PLOT(w_plot),
GTK_PLOT_AXIS_TOP), FALSE);

    gtk_plot_axis_set_visible(gtk_plot_get_axis(GTK_PLOT(w_plot),
GTK_PLOT_AXIS_RIGHT), FALSE);

    x_axis = gtk_plot_get_axis(GTK_PLOT(w_plot), GTK_PLOT_AXIS_BOTTOM);

    y_axis = gtk_plot_get_axis(GTK_PLOT(w_plot), GTK_PLOT_AXIS_LEFT);

     gtk_plot_axis_set_title(x_axis, "Time [t]");

    gtk_plot_axis_hide_title(y_axis);

    gtk_plot_x0_set_visible(GTK_PLOT(w_plot), TRUE);

    gtk_plot_y0_set_visible(GTK_PLOT(w_plot), TRUE);

    gtk_plot_canvas_put_child(GTK_PLOT_CANVAS(w_plot_canvas),

                              gtk_plot_canvas_text_new("Helvetica",

                                                       12, 0,

                                                       NULL, NULL,

                                                       FALSE,

                                                       GTK_JUSTIFY_CENTER,

                                                       "Intensity"

                                                       ),

                              .10, .1, .20, .20);

     // Build data and put it in plot

    build_example1(w_plot);

    gtk_widget_show(GTK_WIDGET(w_plot));

     g_signal_connect(G_OBJECT(w_plot_canvas), "expose-event",

                     G_CALLBACK(&plot_expose_event), NULL);

     return w_plot_canvas;

}

 // This is an example of how to update the data displayed in the

// widget. For more examples, see testrealtime.c.

void cb_change_dataset(GtkWidget *button,

                       gpointer user_data

                       )

{

    GtkWidget *canvas = GTK_WIDGET(user_data);

    static gdouble px1[]={0., 0.2, 0.4, 0.6, 0.8, 1.0};

    static gdouble py1[]={.35, .30, .40, .2, .4, .5 };

     gtk_plot_data_set_points(dataset, px1, py1, NULL, NULL, 6);

    gtk_plot_canvas_paint(GTK_PLOT_CANVAS(canvas));

    gtk_widget_queue_draw(canvas);

}

 void create_widgets()

{

    GtkWidget *w_vbox, *w_plot_canvas, *w_button;

     w_top = gtk_window_new(GTK_WINDOW_TOPLEVEL);

    gtk_signal_connect(GTK_OBJECT(w_top),

                       "delete_event",

                       gtk_main_quit,

                       NULL);

     w_vbox = gtk_vbox_new(FALSE, 0);

    gtk_container_add(GTK_CONTAINER(w_top), w_vbox);

     w_plot_canvas = create_plot();

    gtk_box_pack_start(GTK_BOX(w_vbox), w_plot_canvas, TRUE, TRUE, 0);

     w_button = gtk_button_new_with_label("ok");

    gtk_box_pack_start(GTK_BOX(w_vbox), w_button, FALSE, FALSE, 0);

    gtk_signal_connect(GTK_OBJECT(w_button),

                       "clicked",

                       gtk_main_quit,

                       NULL);

     gtk_widget_show_all(w_top);

}

 int main(int argc, char *argv[])

{

    gtk_init(&argc, &argv);

     create_widgets();

     gtk_main();

}



On Wed, Mar 24, 2010 at 07:04, Arsen Mamikonyan <mamikonyana yahoo com>wrote:

Hello everyone,

I'm trying to write an application with Gtk+/GtkPlot that will periodically
plot the data received over network/internet.
I have some problem with figuring out how to make graphs and show them
using GtkPlot, mainly because I can't find any documentation or simple
ploting program examples. I'm new to Gtk so I have hard time figuring out by
myself.
I would appraciate very much if someone can give me an example how to plot
and  show graph out of sample data points.

Thanks and Best Regards,

Arsen Mamikonyan
MIT Class of 2012




_______________________________________________
gtk-app-devel-list mailing list
gtk-app-devel-list gnome org
http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]