#perl #gnuplot #heatmap
#perl #gnuplot ( гнуплот ) #тепловая карта #gnuplot
Вопрос:
Я пытался создать что-то вроде
Но я не смог получить тики по осям x и y, я попробовал что-то вроде этого, чтобы увидеть, появляются ли тики по оси x
my @data = (
[0, 0, 10],
[0, 1, 10],
[0, 2, 10],
[],
[1, 0, 10],
[1, 1, 5],
[1, 2, 10],
[],
[2, 0, 10],
[2, 1, 1],
[2, 2, 10],
[],
[3, 0, 10],
[3, 1, 0],
[3, 2, 10],
);
my $chart = Chart::Gnuplot->new(
output => "test1.png",
title => "3D plot from arrays of x, y and z coordinates",
xlabel => 'x',
ylabel => 'y',
xtics => {
labels => ['"pi" 3.1416', '"-pi" -3.1416'],
},
);
$chart->set(pm3d => 'map');
$chart->set(palette => 'defined (0 0 0 1, 1 1 1 0, 2 1 0 0)');
my $dataSet = Chart::Gnuplot::DataSet->new(
points => @data,
);
$chart->plot3d($dataSet);
Я не уверен, каким должен быть набор данных и как следует добавлять тики по осям x и y
Я протестировал вышесказанное на нескольких примерах, которые я получил из Интернета, но не смог увидеть результат.
Была бы высоко оценена любая помощь в получении этого, подобного изображению
Возникла еще одна проблема: при попытке получить все значения по осям X и Y, значения xtics и ytics отображаются не полностью, как на изображении выше, то, которое я получил, выглядит следующим образом
Набор данных выглядит следующим образом
[
0,
1,
'2.66556908091426'
],
[
0,
2,
'4.37897014657203'
],
[
0,
3,
'1.22514023397498'
],
[
0,
4,
'4.53000730040497'
],
[
0,
5,
'3.01982096624856'
],
[
0,
6,
'0.499618756879272'
],
[
0,
7,
'4.84182728928223'
],
[
0,
8,
'1.96005062661005'
],
[
0,
9,
'2.42800730644825'
],
[
0,
10,
'1.86670807696721'
],
[
0,
11,
'1.81614100038358'
],
[
0,
12,
'4.39616981937487'
],
[
0,
13,
'3.35256272447085'
],
[
0,
14,
'3.24814393010016'
],
[
0,
15,
'1.06219230833835'
],
[
0,
16,
'1.12793288928973'
],
[
0,
17,
'3.26476861756371'
],
[
0,
18,
'3.10578946862982'
],
[
0,
19,
'2.93146341009402'
],
[
0,
20,
'1.72192716962012'
],
[
0,
21,
'4.04316953579938'
],
[
0,
22,
'0.32291976646917'
],
[
0,
23,
'4.42019093014144'
],
[
0,
24,
'3.31129513399691'
],
[
0,
25,
'4.561835018284'
],
[
0,
26,
'1.23709783845847'
],
[
0,
27,
'2.65864379090912'
],
[
0,
28,
'2.30212288203429'
],
[
0,
29,
'0.621743568938786'
],
[
0,
30,
'1.80416068716383'
],
[
0,
31,
'2.66465304546164'
],
[
0,
32,
'3.45680173240485'
],
[
0,
33,
'2.70739617274879'
],
[
0,
34,
'1.11428672300967'
],
[
0,
35,
'1.67761705545201'
],
[
0,
36,
'2.74299975084073'
],
[
0,
37,
'1.80397491377351'
],
[
0,
38,
'4.47728976228916'
],
[
0,
39,
'4.68895286431879'
],
[
0,
40,
'0.14021332300036'
],
[
0,
41,
'2.33736192052044'
],
[
0,
42,
'0.177482592020581'
],
[
0,
43,
'4.73906999291613'
],
[
0,
44,
'2.31796437164231'
],
[
0,
45,
'3.99016409499582'
],
[
0,
46,
'3.38293261332254'
],
[
0,
47,
'2.61350773461833'
],
[
0,
48,
'4.73763682658106'
],
[
0,
49,
'0.882213941365624'
],
[
0,
50,
'0.772076148467349'
],
[
0,
51,
'0.211627911950369'
],
[
0,
52,
'0.983901796963771'
],
[
0,
53,
'4.20512536118553'
],
[
0,
54,
'1.23297443353948'
],
[
0,
55,
'3.81554353946163'
],
[
0,
56,
'3.65498488100304'
],
[
0,
57,
'2.57928958709011'
],
[
0,
58,
'2.59561593117475'
],
[
0,
59,
'0.00576648038274286'
],
[
0,
60,
'3.7901264909274'
],
[
0,
61,
'2.01073954816936'
],
[
0,
62,
'4.20235419868604'
],
[
0,
63,
'0.0699755500835941'
],
[
0,
64,
'1.89704728306967'
],
[
0,
65,
'3.60775496050488'
],
[
0,
66,
'0.210700948492715'
],
[
0,
67,
'1.46456716998541'
],
[
0,
68,
'1.17475107720264'
],
[
0,
69,
'3.05671437798837'
],
[
0,
70,
'2.68927795266336'
],
[
0,
71,
'2.51310517387102'
],
[
0,
72,
'2.47339733795219'
],
[
0,
73,
'0.0279383841017911'
],
[
0,
74,
'0.722901884055389'
],
[
0,
75,
'2.87491127698443'
],
[
0,
76,
'4.06219968687022'
],
[
0,
77,
'1.10014911730135'
],
[
0,
78,
'2.12579086549013'
],
[
0,
79,
'0.969934599414497'
],
[
0,
80,
'0.0104263290325335'
],
[
0,
81,
'4.76235946351673'
],
[
0,
82,
'0.790123228138313'
],
[
0,
83,
'0.0974340515172223'
],
[
0,
84,
'2.25078802534153'
],
[
0,
85,
'1.52078958155231'
],
[
0,
86,
'1.81615557330844'
],
[
0,
87,
'4.29625290304719'
],
[
0,
88,
'3.46711963355933'
],
[
0,
89,
'3.9427030133586'
],
[
0,
90,
'0.10345150062939'
],
[
0,
91,
'3.43953703174092'
],
[
0,
92,
'4.31073758997368'
],
[
0,
93,
'2.58639853373042'
],
[
0,
94,
'4.08224212269872'
],
[],
Комментарии:
1. Ваш набор данных выглядит нормально, какой у вас был вопрос по этому поводу? Что касается
xticks
: я протестировал это сxtics => {labels => [0, 1, 2, 3]}
, и метки отображаются нормально.x
Используемые вами метки (3.14 и -3.14) находятся за пределами диапазона данных, поэтому они не будут отображаться.2. Мне нужно увидеть значения по осям x и y, как на изображении выше (01 октября, 02 октября), должен ли я добавить это в набор данных или мне добавить это в xtics или ytics?
3. Смотрите мой ответ для примера того, как вы можете установить тики.
Ответ №1:
Вот пример того, как вы можете установить метки осей:
use strict;
use warnings;
use Chart::Gnuplot;
my @data = (
[0, 0, 10],
[0, 1, 10],
[0, 2, 10],
[0, 3, 10],
[],
[1, 0, 10],
[1, 1, 5],
[1, 2, 10],
[1, 3, 10],
[],
[2, 0, 10],
[2, 1, 1],
[2, 2, 1],
[2, 3, 10],
[],
[3, 0, 10],
[3, 1, 0],
[3, 2, 5],
[3, 3, 10],
);
my $chart = Chart::Gnuplot->new(
bg => 'white',
pm3d => 'map',
palette => 'defined (0 0 0 1, 1 1 1 0, 2 1 0 0)',
output => "test.png",
title => "3D plot from arrays of x, y and z coordinates",
xlabel => 'x',
ylabel => 'y',
xtics => {
labels => ['"0030" 0', '"0100" 1', '"0130" 2', '"0200" 3'],
rotate => 90,
},
ytics => {
labels => ['"04-Oct" 0', '"03-Oct" 1', '"02-Oct" 2', '"01-Oct" 3'],
},
);
my $dataSet = Chart::Gnuplot::DataSet->new( points => @data );
$chart->plot3d($dataSet);
Обновить:
Вы можете создать ее xtics
в цикле, подобном этому (с учетом времени данных $dt
):
my @xtics;
for ( my $i=0; $i<($interval_count-1); $i ){
$dt->add(minutes => $interval_period);
my $xtic = '"' . $dt->hour . ':' . $dt->minute . '"' . ' ' . $i;
push @xtics, $xtic;
}
Затем установите для xtics
параметра Chart::Gnuplot->new()
значение, подобное этому:
xtics => { labels => @xtics, rotate => 90, },
Комментарии:
1. Я сомневаюсь, могу ли я использовать метку xtic внутри цикла следующим образом: my $ xtics; for (мой $ i = 0;$ i<($interval_count-1); $ i ){ $ dt-> добавить (минуты => $ interval_period); $ xtics .= «‘».'»‘.$ время работы-> час.’:’.$dt-> минута.'»‘.».$i.»‘,»; } $ xtics = ~ s /, $//; и внутри gnuplot-> new() присвоите xtic значение xtics => { labels => [$ xtic], rotate => 90, }, но оно показывает мне ошибку- недопустимое выражение
2. У меня возникла проблема с тем, что Xtics и Ytics не отображаются полностью, может быть, это пробел? Я добавил код imagesize => «0.8, 0.5», но, похоже, ничего хорошего. Добавлены подробности в вопросе
3. @Jitesh Не могли бы вы прислать мне весь код, с которым вы работаете? Тогда я взгляну на нее. (Мой адрес электронной почты указан в моем профиле)
4. отправил вам детали по почте