Skip to content

Feature request: plotting with x axis being vector of strings #40

@cooldome

Description

@cooldome

I variation of previous example with one change: tenors column (the X axis) is vector of strings.
If axis X is strings I expect graph to be equally spaced in X axis.

import ggplotnim
import random
import tables
import math

const paths = 20
const dates = 80

proc gaussian*(rnd: var Rand, mu = 0.0, sigma = 1.0): float =
  var
    s = 0.0
    u = 0.0
    v = 0.0
  while s >= 1.0 or s <= 0.0:
    u = 2.0 * rnd.rand(0.0..1.0) - 1.0
    v = 2.0 * rnd.rand(0.0..1.0) - 1.0
    s = (u * u) + (v * v)

  let x = u * sqrt(-2.0 * ln(s) / s)
  return (mu + (sigma * x))

proc createDataFrame(): DataFrame = 
  const sigma = 0.10

  var rnd = initRand(124325)
  var data: OrderedTable[string, seq[Value]]
  var simPath = newSeq[Value](dates)
  for j in 0..<paths:
    simPath[0] = %~  100.0
    for i in 1..<dates:
      simPath[i] = %~(simPath[i-1].toFloat() * exp(-0.5 * sigma^2 + sigma * gaussian(rnd)))
    data["path" & $(j + 1)] = simPath

  var tenors = newSeq[Value](dates)
  for i in 0..<dates:
    tenors[i] = %~ ("t" & $i)
  data["tenors"] = tenors
  toDf(data)

let df = createDataFrame()
var g = ggplot(df)
for i in 1..paths:
  g = g + geom_line(aes(y = "path" & $i, x = "tenors"))
g + ggsave("test1.pdf")

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions