| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- package main
- import (
- "bytes"
- "encoding/json"
- "fmt"
- "io"
- "io/ioutil"
- "math/rand"
- "os"
- "os/exec"
- "strings"
- "time"
- )
- type Plot struct {
- X string `json:"x"`
- Y string `json:"y"`
- }
- type ChartPlot struct {
- Title string `json:"title"`
- SizeX string `json:"x_size"`
- SizeY string `json:"y_size"`
- LabelX string `json:"x_label"`
- LabelY string `json:"y_label"`
- Plots []Plot `json:"plots"`
- }
- var TITLE string = "{TITLE}"
- var LABEL_X string = "{LABEL_X}"
- var LABEL_Y string = "{LABEL_Y}"
- var OUTPUT string = "{OUTPUT}"
- var INPUT string = "{INPUT}"
- var LINE string = "{LINE}"
- func RandString(n int) string {
- rand.Seed(time.Now().UnixNano())
- r := []rune("qwertyuiopasdfghjklzxcvbnm1234567890")
- b := make([]rune, n)
- for i := range b {
- b[i] = r[rand.Intn(len(r))]
- }
- return string(b)
- }
- func main() {
- filename := "xplot_" + RandString(15)
- chart := ChartPlot{}
- jsonData, errRead := ioutil.ReadFile("./data.json")
- if errRead != nil {
- fmt.Println(errRead.Error())
- }
- err := json.Unmarshal([]byte(string(jsonData)), &chart)
- if err != nil {
- fmt.Println(err.Error())
- }
- f, _ := os.Create(filename + ".data")
- defer f.Close()
- for _, p := range chart.Plots {
- f.WriteString(p.X + " " + p.Y + ",\n")
- }
- f.Sync()
- buf := bytes.NewBuffer(nil)
- tp, _ := os.Open("tp_chart.plot")
- io.Copy(buf, tp)
- defer tp.Close()
- str := string(buf.Bytes())
- str = strings.Replace(str, TITLE, "my Chart", 1)
- str = strings.Replace(str, LABEL_X, "1024", 1)
- str = strings.Replace(str, LABEL_Y, "768", 1)
- str = strings.Replace(str, OUTPUT, filename, 1)
- str = strings.Replace(str, INPUT, filename, 1)
- str = strings.Replace(str, LINE, "donut", 1)
- f2, _ := os.Create(filename + ".plot")
- defer f2.Close()
- f2.WriteString(str)
- f2.Sync()
- out, errOut := exec.Command("./gnuplot", "./"+ filename + ".plot").Output()
- if errOut != nil {
- fmt.Println(errOut.Error())
- }
- fmt.Println(string(out))
- }
|