diff options
| author | Björn B. Brandenburg <bbb@cs.unc.edu> | 2010-11-24 14:58:58 -0500 |
|---|---|---|
| committer | Björn B. Brandenburg <bbb@cs.unc.edu> | 2010-11-24 14:58:58 -0500 |
| commit | 0bd8dea3a724fcb2d4ffa3435f00fe45529e7868 (patch) | |
| tree | 3f55fb6a431187fc27deb0c5ca2313c97a8ece93 | |
| parent | dca4e3b844e759a029c52928c769c362ab5dce1d (diff) | |
support plotting histograms
| -rwxr-xr-x | gnuplot.py | 38 |
1 files changed, 36 insertions, 2 deletions
| @@ -86,14 +86,32 @@ class LiteralGraph(object): | |||
| 86 | (self.expr, title_txt, style_txt) | 86 | (self.expr, title_txt, style_txt) |
| 87 | 87 | ||
| 88 | 88 | ||
| 89 | class HistogramGraph(object): | ||
| 90 | def __init__(self, fname, col=1, labels_col=None): | ||
| 91 | self.fname = fname | ||
| 92 | self.data_col = col | ||
| 93 | self.labels_col = labels_col | ||
| 94 | |||
| 95 | def __str__(self): | ||
| 96 | return self.gnuplot_cmd() | ||
| 97 | |||
| 98 | def gnuplot_cmd(self, default_style=None): | ||
| 99 | if self.labels_col != None: | ||
| 100 | lstr = ":xticlabels(%s)" % self.labels_col | ||
| 101 | else: | ||
| 102 | lstr = "" | ||
| 103 | return "'%s' using %s%s" % (self.fname, self.data_col, lstr) | ||
| 104 | |||
| 105 | |||
| 89 | label = Label | 106 | label = Label |
| 90 | 107 | ||
| 91 | def curve(fname=None, literal=None, **kargs): | 108 | def curve(fname=None, literal=None, histogram=None, **kargs): |
| 92 | if fname: | 109 | if fname: |
| 93 | return FileGraph(fname, **kargs) | 110 | return FileGraph(fname, **kargs) |
| 94 | elif literal: | 111 | elif literal: |
| 95 | return LiteralGraph(literal, **kargs) | 112 | return LiteralGraph(literal, **kargs) |
| 96 | 113 | elif histogram: | |
| 114 | return HistogramGraph(histogram, **kargs) | ||
| 97 | 115 | ||
| 98 | class Plot(object): | 116 | class Plot(object): |
| 99 | def __init__(self): | 117 | def __init__(self): |
| @@ -119,14 +137,24 @@ class Plot(object): | |||
| 119 | self.ylog = None | 137 | self.ylog = None |
| 120 | self.ylabel = None | 138 | self.ylabel = None |
| 121 | 139 | ||
| 140 | self.boxwidth = None | ||
| 141 | |||
| 122 | self.key = None | 142 | self.key = None |
| 123 | self.title = None | 143 | self.title = None |
| 124 | 144 | ||
| 125 | self.labels = [] | 145 | self.labels = [] |
| 126 | self.curves = [] | 146 | self.curves = [] |
| 147 | self.style = {} | ||
| 127 | 148 | ||
| 128 | self.default_style = None # for plotted curves | 149 | self.default_style = None # for plotted curves |
| 129 | 150 | ||
| 151 | def setup_histogram(self, gap=None, boxwidth=0.9): | ||
| 152 | self.style['data'] = 'histogram' | ||
| 153 | if gap != None: | ||
| 154 | self.style['histogram'] = 'cluster gap %s' % gap | ||
| 155 | self.style['fill'] = 'solid 1.0 border -1' | ||
| 156 | self.boxwidth = '%.2f relative' % boxwidth | ||
| 157 | |||
| 130 | def gnuplot_commands(self, cmd_buf=None): | 158 | def gnuplot_commands(self, cmd_buf=None): |
| 131 | if cmd_buf: | 159 | if cmd_buf: |
| 132 | g = cmd_buf | 160 | g = cmd_buf |
| @@ -198,6 +226,12 @@ class Plot(object): | |||
| 198 | if logscale: | 226 | if logscale: |
| 199 | g("set logscale %s" % logscale) | 227 | g("set logscale %s" % logscale) |
| 200 | 228 | ||
| 229 | if self.boxwidth: | ||
| 230 | g('set boxwidth %s' % self.boxwidth) | ||
| 231 | |||
| 232 | for s in self.style: | ||
| 233 | g("set style %s %s" % (s, self.style[s])) | ||
| 234 | |||
| 201 | plots = [c.gnuplot_cmd(self.default_style) for c in self.curves] | 235 | plots = [c.gnuplot_cmd(self.default_style) for c in self.curves] |
| 202 | if plots: | 236 | if plots: |
| 203 | g("plot " + ", ".join(plots)) | 237 | g("plot " + ", ".join(plots)) |
