Тепловая карта с использованием диаграммы ::Gnuplot Perl

#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. отправил вам детали по почте