Chart module的一个bug

简介:
美国波士顿大学一个计算机学院的99届学生David Bonner基于GD模块进行二次开发的适用于Perl语言的画图模块Chart, 最新版本是2.4.1( [url]http://search.cpan.org/~chartgrp/Chart-2.4.1/Chart.pod[/url],由一个新group维护),可以帮助Perl程序员方便地实现各类图表的绘制,如饼图,柱图,折线图,趋势图,分布图等,具体可以看上面的链接文档。
最近用该模块绘制基于一年数据的柱图时,发现横坐标总是上下分行,还规律不定。我想我只是在每月初打印横坐标,为何给我分行。我按文档说明已经设置x_ticks为normal了,怎么还是staggered呢(缺省也是normal)。后来跟踪Chart模块的源代码发现,这是一个忽略的逻辑问题。Chart认为该图表有365个数据点,横坐标无法显示(虽然其实只有至多12点需要横坐标),所以强制改x_ticks由normal到staggered,所以出现上下分行显示,规律不齐是因为有的月份30天,有的31天,奇偶性不同。后来在源模块中改变下行代码,即可实现单行显示(当然staggered设置还是可以继续生效)。
  if ($delta <= ($self->{'x_tick_label_length'} * $w) /  $self->{'skip_x_ticks'}) {
改为
  if ($delta <= ($self->{'x_tick_label_length'} * $w) /  $self->{'skip_x_ticks'}  && !$self->{'custom_x_ticks'}) {
 
上述改动意味着只有等距坐标宽度不够才作强制设置。当自定义横坐标系列时,不做此检查和设置变化。
 
该模块的纵坐标设置也有些问题,以后有空也要做些改进。比如全系列为0值时的步长和初始值。
全系列为0值时的步长和初始值会出现-1到+1的纵坐标值范围。这是Chart源代码中另一处不够严谨的地方。现列如下:
if($d_width ==0){
$d_min--;
$d_max++;
$d_width=2;
} 应改为
if($d_width==0){
  if($d_min>=1){
    $d_min--;
    $d_max++;
  } else {
    $d_max +=2;
  }
  $d_width = 2;
}

本文转自 dannyy1026 51CTO博客,原文链接:http://blog.51cto.com/dannyyuan/38480
相关文章
|
监控 物联网 视频直播
流量卡类型及其适用场景
不同流量卡的使用场景可以根据其特点、套餐内容、价格以及用户的具体需求来划分。以下是一些常见的流量卡类型及其适用场景:
|
3月前
|
网络协议 安全 数据采集
阿里云Socks5代理功能与应用场景详解
Socks5代理是阿里云环境下高效合规的会话层代理工具,支持TCP/UDP全协议透明传输,具备高匿名性、强兼容性与精细权限管控能力,广泛应用于合规数据采集、跨境访问、云资源安全调用及远程运维等场景。
阿里云Socks5代理功能与应用场景详解
|
8月前
|
数据采集 存储 JSON
从客户需求到 API 落地:淘宝商品详情批量爬取与接口封装实践
本文详解如何用Python实现淘宝商品数据爬取并封装为API,支持传入商品ID即返回标题、价格、库存等结构化信息。结合Requests、Playwright与FastAPI,兼顾反爬应对与易用性,提供可复用的电商数据采集方案。
|
供应链 API 开发者
解锁电商数据的无限可能:探秘京东商品SKU信息API接口
京东商品SKU信息API接口是电商开发与运营中的重要工具,帮助开发者获取商品的详细属性,如库存、价格、规格等。通过该接口,电商平台可以丰富商品展示页面,提升用户体验;商家能实时掌握库存动态,优化销售策略;数据分析人员可深入洞察市场趋势,实现精准营销。使用前需注册京东开放平台账号、创建应用并获取API权限,同时仔细阅读API文档以确保正确调用。代码示例展示了如何用Python调用该接口,并处理返回数据。未来,该接口将在个性化推荐、智能库存管理和数据分析等领域发挥更大作用,助力电商业务创新与发展。
1059 14
|
10月前
|
Web App开发 存储 缓存
markdown编辑器
本Markdown编辑器基于StackEdit改进,新增界面设计、代码高亮、图片拖拽、KaTeX公式、甘特图、多屏编辑、写作模式切换、检查列表等功能,提升写作体验,支持离线使用与多种格式导出。
558 0
markdown编辑器
|
JSON 前端开发 JavaScript
SpringBoot 2.0 多图片上传加回显
本文记录了在SpringBoot 2.0中实现商户注册后台功能时,处理多图片上传及回显的过程。通过使用`MultipartFile[]`接收前端传来的图片文件,并确保前后端参数名一致。展示了Controller、前端HTML和JS代码,以及配置文件中对上传图片大小的设置。还介绍了全局异常处理机制,使用`@ControllerAdvice`注解捕获异常。最后总结了一些常见问题及解决方法。
371 0
SpringBoot 2.0 多图片上传加回显
|
Java 调度 Android开发
安卓与iOS开发中的线程管理差异解析
在移动应用开发的广阔天地中,安卓和iOS两大平台各自拥有独特的魅力。如同东西方文化的差异,它们在处理多线程任务时也展现出不同的哲学。本文将带你穿梭于这两个平台之间,比较它们在线程管理上的核心理念、实现方式及性能考量,助你成为跨平台的编程高手。
|
JavaScript 前端开发 UED
HTML 超链接的多种类型及应用
【10月更文挑战第17天】HTML 超链接类型丰富多样,它们共同构成了网页中不可或缺的导航和交互元素。通过合理地选择和运用这些超链接类型,我们可以为用户创造更加流畅和便捷的浏览体验,提升网站的可用性和吸引力。
992 1
|
存储 安全 网络协议
Windows内网常用协议分析
Windows内网常用协议分析
808 1
|
数据库
SAP ABAP——数据类型(二)【TYPES自定义数据类型详解】
在上一文 SAP ABAP——数据类型(一)【数据类型概要及分类】我们知道了ABAP中三种类型的数据类型,本文承接上一文继续对ABAP中关于用户自定义数据类型TYPES进行一个深入的讲解!关于全局数据字典类型更详细的介绍将会在下一章节【数据字典】中进行详解!
7405 1
SAP ABAP——数据类型(二)【TYPES自定义数据类型详解】