Enrole o título no Gnuplot

1

Está tudo no assunto. Eu uso uma linha (longa) do arquivo de dados como título, e o Gnuplot não a envolve.

Eu não conheço o conteúdo da linha com antecedência, então não sei como posso inserir um \n . Como posso fazer o Gnuplot encapsular o título?

    
por ExpertNoob 10.07.2012 / 10:39

1 resposta

3

Você deve editar os dados em seu arquivo e inserir um \n no campo de onde o título é analisado.

O Gnuplot reconhecerá o \n e quebrará a linha nesse ponto. Caso contrário, você precisa inserir manualmente o título e adicionar \n na posição desejada.

É importante observar que \n só é considerado pelo gnuplot se você tiver "string" em vez de 'string' .

Se você não puder editar os dados em seu arquivo, poderá usar as funções de string no gnuplot. Com strlen("string") você pode encontrar o tamanho da sua string e, em seguida, com substr("string",begin,end) , você pode dividir suas strings.

Aqui está uma lista completa das funções do gnuplot: link

Em resumo, você teria algo como

foo = "my data"
length = strlen(foo)                   #get string length
length2 = sprintf("%1.d", length / 2)  #round halved down string length to find center char
foo1 = substr(foo, 0, length2)         #get first half of string
foo2 = substr(foo, length2, length)    #get second half of string
titlestring = foo1.\n.foo2             #make new title string with newline character 

Para mais detalhes, consulte o script de demonstração da variável de string do gnuplot: link

onde exemplos como estes são dados:

#
# Miscellaneous neat things you can do using the string variables code
#
set print "stringvar.tmp"
print ""
print "Exercise substring handling"
print ""
beg = 2
end = 4
print "beg = ",beg," end = ",end
foo = "ABCDEF"
print "foo           = ",foo
print "foo[3:5]      = ",foo[3:5]
print "foo[1:1]      = ",foo[1:1]
print "foo[5:3]      = ",foo[5:3]
print "foo[beg:end]  = ",foo[beg:end]
print "foo[end:beg]  = ",foo[end:beg]
print "foo[5:]       = ",foo[5:]
print "foo[5:*]      = ",foo[5:*]
print "foo[:]        = ",foo[:]
print "foo[*:*]      = ",foo[*:*]
print "foo.foo[2:2]  = ",foo.foo[2:2]
print "(foo.foo)[2:2]= ",(foo.foo)[2:2]
print ""
print "foo[1:1] eq 'A' && foo[2:2] ne 'X' = ", \
      (foo[1:1] eq 'A' && foo[2:2] ne 'X') ? "true" : "false"

unset print

set label 1 system("cat stringvar.tmp") at graph 0.1, graph 0.9
unset xtics
unset ytics
set yrange [0:1]
plot 0

Juntamente com a função strlen , você deve ser capaz de construir sua solução para processar automaticamente seus dados no gnuplot e colocar o caractere de nova linha onde quiser (por exemplo, após cada 20 caracteres).

Se você quiser quebrar as palavras, você usaria:

wordnumber = word(foo)                           #get number of words
wordernumber2 = sprintf("%1.d", wordnumber / 2)  #round down half of #words
do for [i=0:wordnumber2] {                       #add half of words to string
    string = string.word(foo,i)
}
string = string.\n                               #add newline to string
do for [i=wordnumber2:wordnumber] {              #add 2nd half of words
    string = string.word(foo,i)
}

Isso requer o gnuplot 4.4 +

    
por 15.11.2015 / 21:13

Tags