Можно ли использовать индексы в качестве значений xtic в гистограмме? - PullRequest
0 голосов
/ 06 октября 2018

В файле с данными в следующей структуре:

# [year]
"Town A" population
"Town B" population
"Town C" population

# [year2]
"Town A" population
"Town B" population
"Town C" population

# [year3]
"Town A" population
"Town B" population
"Town C" population

Мне удалось создать гистограмму, используя следующее:

set style data histogram
set style histogram columnstacked
p 'file.dat' index '[year]' u 2:key(1) ,\
'' index '[year2]' u 2,\
'' index '[year3]' u 2;

Предыдущие настройки почти полностью отображают графикоднако, как мне это нужно, я хотел бы иметь возможность использовать имена индексов (теги?) в качестве значений xtic, с этого момента значения xtic равны 0, 1 и 2 вместо года, года2 и года3.Может ли gnuplot использовать значения индекса в качестве xtics в гистограмме с такой структурой данных?

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Требуются две пустые строки между блоками данных в файле file.dat:

# [year]
"Town A" 123
"Town B" 543
"Town C" 789


# [year2]
"Town A" 234
"Town B" 666
"Town C" 1000


# [year3]
"Town A" 345
"Town B" 600
"Town C" 800

Команды Gnuplot (требуется версия 5.2.5 или более поздняя)

set style data histogram
set style histogram columnstacked
set style fill solid border lc black
plot 'file.dat' index '[year]' u 2:key(1) title strcol(-2),\
     '' index '[year2]' u 2 title strcol(-2),\
     '' index '[year3]' u 2 title strcol(-2)

Обратите внимание, что столбец -2 относитсяк значению индекса.Это не новость, но версия 5.2.5 теперь позволяет использовать ее в функции strcol () (короткое имя для stringcolumn ()).Заголовок и интервал столбцов могут быть улучшены.enter image description here

0 голосов
/ 06 октября 2018

Я не вижу способа установить это внутри самой команды plot.Это отличная идея, и я буду выдвигать ее как запрос функции для gnuplot.Лучшее, что я могу предложить, это то, что предполагается, что вы заранее знаете набор строк индекса.Я показываю это как итерацию над N, потому что я предполагаю, что у вас действительно может быть больше 3, а для больших чисел итерация гораздо меньше набирает.

N = 3
array INDEX[N] = [ "[year1]", "[year2]", "[year3]" ]
set xtics 1
set for [i=1:N] xtics add (INDEX[i] i-1)

plot 'file.dat' index INDEX[1] u 2:key(1) ,\
     for [i=2:N] '' index INDEX[i] u 2
...