Chart :: Clicker中的直方图

阿米戈

我是新手Chart::Clicker,无法创建直方图。使用以下代码:

#!/usr/bin/perl -w

use strict;

use Gtk3 -init;
use Chart::Clicker;
use Chart::Clicker::Renderer::Bar;

my $data = {
        Alpha   => 3,
        Bravo   => 1,
        Charlie => 4,
        Delta   => 1,
        Echo    => 5,
};
my $counter = 0;

my $chart = Chart::Clicker->new;
my $context = $chart->get_context('default');
$context->range_axis->range(Chart::Clicker::Data::Range->new(lower => 0));
for my $value (sort keys %$data) {
        $chart->add_data($value, {$counter++ => $data->{$value}});
}
my $xaxis = Chart::Clicker::Axis->new(orientation => 'horizontal', position => 'bottom');
$xaxis->{tick_values} = [0 .. $counter-1];
$xaxis->{tick_labels} = [sort keys %$data];
$context->{domain_axis} = $xaxis;
$chart->set_renderer(Chart::Clicker::Renderer::Bar->new);
$chart->legend->visible(0);
$chart->draw;

my $win = Gtk3::Window->new;
my $img = Gtk3::Image->new_from_surface($chart->driver->surface);
$win->add($img);
$win->signal_connect('delete-event' => sub{Gtk3::main_quit} );
$win->show_all;
Gtk3::main;

产生以下输出:

不良结果

我想要的是这样的东西(经过图形编辑):

期望的结果

我不在乎x轴标签上的颜色。尽管我希望条形排列顺序符合我指定的顺序,但是我并不在乎顺序。

编辑:

尝试@Borodin的建议会产生以下结果:

在此处输入图片说明

更好,但是不太正确。现在有25个数据点,但20个数据点为零,因此不显示它们,但它们仍占据X轴上的空间。左边两个被截断,右边两个被截断(丢失的那个在该图表中恰好是零,因此它不如在其他图表中那样糟糕)。

我尝试将X轴在每个方向上延伸一个刻度,这样就不会截断任何东西,但这会导致数据值重叠。我将零值更改为非零以说明正在发生的情况:

在此处输入图片说明

阿米戈

我可以通过切换到一个系列来使它起作用,但这是以颜色为代价的……哦,不能拥有所有东西。

修复了其他一些问题:

  • 调整X轴刻度线,以使最左边和最右边的条不会被切除。
  • 强制Y轴刻度线为整数(由于它是计数发生次数,因此数据将始终为整数)。
  • 为Gtk3 <3.10添加了解决方法。

新代码:

#!/usr/bin/perl -w

use strict;
use Gtk3 -init;
use Chart::Clicker;
use Chart::Clicker::Renderer::Bar;
use POSIX qw/ceil/;

my $data = {
    Alpha   => 3,
    Bravo   => 1,
    Charlie => 4,
    Delta   => 1,
    Echo    => 5,
    Foxtrot => 9,
};

my $points = keys %$data;
my $counter = 0;
my $max = 0;
my $chart = Chart::Clicker->new;
for my $series (sort keys %$data) {
    $chart->add_data('histogram', {++$counter => $data->{$series}});
    $max = $data->{$series} if $data->{$series} > $max;
}
my $context = $chart->get_context('default');
my $yaxis = $context->range_axis;
$yaxis->range(Chart::Clicker::Data::Range->new(lower => 0));

# Force Y-axis ticks to integers
$yaxis->clear_tick_values;
my $increment = ceil($max / 10);
for(my $tick = 0; $tick <= $max; $tick += $increment) {
    $yaxis->add_to_tick_values($tick);
}
$yaxis->format('%d');

# Fix cropped bars on the left and right end of the X-axis
my $xaxis = $context->domain_axis;
$xaxis->tick_values([1 .. $counter]);
$xaxis->tick_labels([sort keys %$data]);
$xaxis->range(Chart::Clicker::Data::Range->new(lower => .5, upper => $counter+.5));
$context->domain_axis($xaxis);

$chart->set_renderer(Chart::Clicker::Renderer::Bar->new);
$chart->legend->visible(0);
$chart->draw;

my $win = Gtk3::Window->new;
my $loader = Gtk3::Gdk::PixbufLoader->new;
$chart->driver->surface->write_to_png_stream(sub {
    $loader->write([unpack 'C*', $_[1]]);
});
$loader->close;
my $img = Gtk3::Image->new_from_pixbuf($loader->get_pixbuf);
$win->add($img);
$win->signal_connect('delete-event' => sub{Gtk3::main_quit} );
$win->show_all;
Gtk3::main;

看起来像这样:

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Chart :: Clicker中的直方图

来自分类Dev

Java功能中的Clicker游戏

来自分类Dev

Microsoft Chart Control中的折线图

来自分类Dev

隐藏JFree Spider Chart中的标签

来自分类Dev

.noDataText不在Chart中更新。斯威夫特2

来自分类Dev

无法在Google Chart API中单击标签

来自分类Dev

在Chart.js中复制对象

来自分类Dev

在MS Chart中循环通过Series集合

来自分类Dev

在Google Card中插入Google Chart

来自分类Dev

React中的Chart JS不获取数据

来自分类Dev

在useEffect中销毁Chart js-React

来自分类Dev

关于chart.js中的堆积图

来自分类Dev

Chart.js 2.0中的AddData

来自分类Dev

如何在Chart JS中显示货币

来自分类Dev

C#中的Crystal Report Chart选项

来自分类Dev

Haskell-Chart中的配色方案

来自分类Dev

如何使Chart.JS在div中居中?

来自分类Dev

在Google Chart API中显示小数

来自分类Dev

Chart.js 中的水平 xAxis 标签

来自分类Dev

在 vue 中从 chart.js 更新图表

来自分类Dev

Google Chart Treemap Tooltip 中的数字格式

来自分类Dev

在 Point Chart Flutter 中实现 List

来自分类Dev

Ubuntu 16.04.1中的Murguu Auto Clicker

来自分类Dev

如何从React js中的State获取Chart JS Pie Chart的数据?

来自分类Dev

ggplot中的重叠直方图和直方图边框

来自分类Dev

Scala中的垂直直方图

来自分类Dev

熊猫中的多个直方图

来自分类Dev

R中的多个直方图

来自分类Dev

R中的重叠直方图