MCPcopy Create free account
hub / github.com/buger/goterm / Draw

Method Draw

plot.go:154–233  ·  view source on GitHub ↗
(data *DataTable)

Source from the content-addressed store, hash-verified

152}
153
154func (c *LineChart) Draw(data *DataTable) (out string) {
155 var scaleY, scaleX float64
156
157 c.data = data
158
159 if c.Flags&DRAW_INDEPENDENT != 0 && len(data.columns) > 3 {
160 fmt.Println("Error: Can't use DRAW_INDEPENDENT for more then 2 graphs")
161 return ""
162 }
163
164 charts := len(data.columns) - 1
165
166 prevPoint := [2]int{-1, -1}
167
168 maxX, minX, maxY, minY := getBoundaryValues(data, -1)
169
170 c.paddingX = int(math.Max(float64(len(ff(minY))), float64(len(ff(maxY))))) + 1
171
172 c.chartHeight = c.Height - c.paddingY
173
174 if c.Flags&DRAW_INDEPENDENT != 0 {
175 c.chartWidth = c.Width - 2*c.paddingX
176 } else {
177 c.chartWidth = c.Width - c.paddingX - 1
178 }
179
180 scaleX = float64(c.chartWidth) / (maxX - minX)
181
182 if c.Flags&DRAW_RELATIVE != 0 || minY < 0 {
183 scaleY = float64(c.chartHeight) / (maxY - minY)
184 } else {
185 scaleY = float64(c.chartHeight) / maxY
186 }
187
188 for i := 1; i < charts+1; i++ {
189 if c.Flags&DRAW_INDEPENDENT != 0 {
190 maxX, minX, maxY, minY = getBoundaryValues(data, i)
191
192 scaleX = float64(c.chartWidth-1) / (maxX - minX)
193 scaleY = float64(c.chartHeight) / maxY
194
195 if c.Flags&DRAW_RELATIVE != 0 || minY < 0 {
196 scaleY = float64(c.chartHeight) / (maxY - minY)
197 }
198 }
199
200 symbol := Color("•", i)
201
202 c_data := getChartData(data, i)
203
204 for _, point := range c_data {
205 x := int((point[0]-minX)*scaleX) + c.paddingX
206 y := int((point[1])*scaleY) + c.paddingY
207
208 if c.Flags&DRAW_RELATIVE != 0 || minY < 0 {
209 y = int((point[1]-minY)*scaleY) + c.paddingY
210 }
211

Callers 4

TestLineChartIndependentFunction · 0.95
TestLineChartRelativeFunction · 0.95
TestLineChartFunction · 0.95
mainFunction · 0.95

Calls 6

DrawLineMethod · 0.95
DrawAxesMethod · 0.95
getBoundaryValuesFunction · 0.85
ffFunction · 0.85
ColorFunction · 0.85
getChartDataFunction · 0.85

Tested by 3

TestLineChartIndependentFunction · 0.76
TestLineChartRelativeFunction · 0.76
TestLineChartFunction · 0.76