Portál AbcLinuxu, 6. května 2025 16:09
Dobrý večer, pokouším se za pomoci nástrojů rrdtool nebo gnuplot vytvořit graf zobrazující zapnutý stav (1) zelenou barvou a vypnutý stav (0) červenou barvou. Graf by byl lineární, na ose x znázorněn čas, osa y by pouze zobrazovala sloupce buď zelené, či červené barvy na sobě přitisknuté v jedné ose. Časový horizont 24hodin.
Nemáte někdo materiál který bych mohl obšlehnout, pár hodin se snažím googlit, ale v tomhle se opravdu nevyznám, jakoukoliv radu uvítám, děkuji.
Příklad logu: 2013-06-22 08:41:44 1 2013-06-22 08:41:44 0 2013-06-22 08:46:13 1 2013-06-22 08:58:59 0 2013-06-22 09:03:31 1 2013-06-22 21:44:12 0 2013-06-22 21:44:17 1 2013-06-22 21:48:08 0 2013-06-22 22:07:47 1 2013-06-22 22:26:06 0
Zkus vzít přiložený skript onoffbar
a dát mu na vstup ten svůj log (jakýkoliv), zhruba takto:
./onoffbar < log.txt > time.png
Vyleze z toho .png, který je taktéž v příloze.
Chce to samozřejmě doladit pár parametrů, například velikost okrajů, velikost písem a podobně. To, co tam je teď, funguje poměrně dobře pro zvolený .png formát a pro ten malý příklad vstupu, který tady je. Chceš-li mít vektorové obrázky, u .pdf a .eps je potřeba pár hodnot pozměnit, aby to vycházelo rozumně.#!/bin/bash { cat <<- Rscript log <- read.table(file = stdin()) Rscript cat /dev/stdin echo cat <<- Rscript times <- strptime(paste(log[,1], log[,2]), format = "%Y-%m-%d %H:%M:%S") colors <- c("red", "green") # Choose output format: #postscript(file = "/dev/stdout", paper = "special", width = 10, height = 1, horizontal = FALSE) #pdf(file = "/dev/stdout", paper = "special", width = 10, height = 1, horizontal = FALSE) png(file = "/dev/stdout", width = 1920, height = 192) par( mgp = c(0, 0, 0), oma = c(0, 0, 0, 0), mar = c(8, 0, 0, 0) ### Reduce when switching to pdf/eps ) plot( c(), xlab = NA, ylab = NA, xaxt = "n", yaxt = "n", xaxs = "i", yaxs = "i", ylim = c(0, 1), xlim = c( as.numeric(times[1]), as.numeric(times[length(times)]) ) ) rect( times[1:(length(times) - 1)], rep(0, length(times) - 1), times[2:length(times)], rep(1, length(times) - 1), col = colors[log[,3] + 1], border = NA ) axis( 1, labels = times, at = as.numeric(times), cex.axis = 1, ### Reduce when switching to pdf/eps las = 2, tcl = 0 ) discard <- dev.off() Rscript } | R --slave
No, teď vidím, že s těmi nulovými okraji jsem to fakt přepískl, protože to hltá kus krajních popisků na ose x... Ale to už si můžeš nějak vylepšit, třeba odebráním xaxs = "i"
nebo tak nějak.
Jo, to jsem zapomněl zdůraznit... Skript používá R, takže je třeba ho mít nainstalované. Nejsem si jistý, které balíčky pro R jsou potřeba; tohle mívá každá distribuce rozdělené jinak. Jediné, co by mohlo vyžadovat nějaké extra balíčky, je grafický výstup do nějakého neobvyklého formátu, což snad png, pdf nebo ps nejsou. Takže nějaký základní kousek R by měl asi stačit.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.