Difference between revisions of "Advanced Graphing"

From Scribus Wiki
Jump to navigation Jump to search
Line 10: Line 10:
 
# creates graph with axes and plots Y values
 
# creates graph with axes and plots Y values
 
# X values are fixed
 
# X values are fixed
 +
 +
"""
 +
This script as written assumes a US Letter page in landscape orientation.
 +
No headers are created and even the axis labels are not part of this script.
 +
It was written to plot events over a 24 hour day, so the X axis denotes hours,
 +
and the Y number of events.
 +
 +
The only user input when the script runs is to specify the range of the Y axis,
 +
and indicate the value of individual tick marks. This having been said, nothing
 +
will plot unless you have modified the script and entered values for the yvalue
 +
list. Some arbitrary values are shown below. With a bit more work, you might
 +
load these values from a file or a value dialog(s).
 +
"""
  
 
import scribus
 
import scribus

Revision as of 18:33, 25 July 2010

Some explanatory notes soon. This is an article about a script to create axes with tick marks, then plot data points to the scale of the graph.

#!/usr/bin/env python

# File: axes_graphing.py
# originally 2006.05.17 as graph2.py on Scribus wiki
# this version 2010.07.25
# creates graph with axes and plots Y values
# X values are fixed

"""
This script as written assumes a US Letter page in landscape orientation.
No headers are created and even the axis labels are not part of this script.
It was written to plot events over a 24 hour day, so the X axis denotes hours,
and the Y number of events.

The only user input when the script runs is to specify the range of the Y axis,
and indicate the value of individual tick marks. This having been said, nothing
will plot unless you have modified the script and entered values for the yvalue
list. Some arbitrary values are shown below. With a bit more work, you might 
load these values from a file or a value dialog(s).
"""

import scribus

xorigin = 64      # x-origin of graph
yorigin = 536     # y-origin of graph
xaxis=637     #x axis length
yaxis=408      #y axis length
color="Black"
a = 1.5 # width of lines
l = 2.0
t = 0.8 # width of scale markers
xvalue = []
yvalue = [1,1,4,2,1,0,1,1,4,1,7,2,3,4,4,2,7,5,5,5,5,4,3,2] # graph points
polyvalue = []
if scribus.haveDoc():
    xtick = xorigin
    xscale = xaxis/24 # this gives you typographic points per data unit
    yrange = int(scribus.valueDialog('Maximum Y Scale', 'Enter Top Y Value\n(Scale)'))
    ymark = int(scribus.valueDialog('Tick Mark Interval', 'Enter Y Interval for Tick Marks'))
    ytick = yorigin
    yscale = yaxis/yrange # this gives you typographic points per data unit
    scribus.setRedraw(1)
    scribus.setUnit(0)
    d = scribus.createLine(xorigin,yorigin,xorigin+xaxis,yorigin) # create X axis
    scribus.setLineWidth(a, d)
    scribus.setLineColor(color, d)
    scribus.setFillColor(color, d)
    e = scribus.createLine(xorigin,yorigin,xorigin,yorigin-yaxis) # create Y axis
    scribus.setLineWidth(a, e)
    scribus.setLineColor(color, e)
    scribus.setFillColor(color, e)
    ytick = ytick - ymark * yscale
    nticks = 0
    item = 0
    while (nticks < 24):
        xtick = xtick + xscale
        xvalue.append(xtick)
        xt = scribus.createLine(xtick, yorigin, xtick, yorigin + 5) # creating X axis tick lines
        scribus.setLineWidth(t, xt)
        scribus.setLineColor(color, xt)
        scribus.setFillColor(color, xt)
        nticks += 1
    while (ytick > (yorigin - yaxis)):
        yt = scribus.createLine(xorigin, ytick, xorigin - 5, ytick) # creating Y axis tick lines
        scribus.setLineWidth(t, yt)
        scribus.setLineColor(color, yt)
        scribus.setFillColor(color, yt)
        ytick = ytick - ymark * yscale
    while (item < 24): # this interleaves the X and Y data for createPolyLine
        polyvalue.append(xvalue[item])
        polyvalue.append((yorigin - yvalue[item] * yscale)) 
        item += 1
    poly = scribus.createPolyLine(polyvalue) # this is the actual plotting
    scribus.setLineWidth(l, poly)
    scribus.setLineColor(color, poly)
    scribus.setFillColor("None",poly)

scribus.redrawAll()