Loading [MathJax]/jax/input/TeX/config.js
社区首页 >问答首页 >在可缩放的时间轴上绘制刻度

在可缩放的时间轴上绘制刻度
EN

Stack Overflow用户
提问于 2009-11-26 23:13:21
回答 2查看 539关注 0票数 1

我正在创建一个时间线,我想在其中绘制特定时间步长的刻度。

因此,根据可用的宽度,我希望绘制尽可能多的刻度。但它们不应该离得太近。它们应该至少保持一定数量的像素间隔。

所以当你放大刻度时,刻度显然会分开,但在一定的阈值下,一旦限制允许新刻度绘制,旧刻度之间就会出现新刻度。

那么,如何根据缩放和宽度找到刻度线之间的间距呢?

EN

回答 2

Stack Overflow用户

发布于 2009-11-29 11:58:12

在我的第一个回答之后,你澄清了你的规范,问题比我预想的要简单。您还想要一个比我之前提供的通用解决方案更简单的解决方案。与其编辑我的原始评论,我更愿意创建一个新的评论,因为这是一种完全不同的方法。

首先定义有趣的变量:

代码语言:javascript
代码运行次数:0
复制
minimumPixelsBetweenTicks = 5
axisWidthPixels = 400
axisRangeTime = 1000.0         # = axisMaximumTime - axisMinimumTime
tickSeparationTime = 10 ** e   # e is an unknown integer that we must find

然后,您可以使用以下公式直接计算e(您没有指定语言,所以我使用Python):

代码语言:javascript
代码运行次数:0
复制
e = int(math.ceil(math.log(minimumPixelsBetweenTicks * axisRange / axisWidthPixels, 10)))
票数 3
EN

Stack Overflow用户

发布于 2009-11-26 23:47:38

这有点乱,但它很简单,而且工作得很好:

首先决定在刻度之间应该允许什么时间间隔。由于时间系统的疯狂(以10为基数?60号基地?一个月有多长?)没有特别好的算法来生成这个列表--只需选择人们熟悉的自然间隔,并将其硬编码到您的程序中:

代码语言:javascript
代码运行次数:0
复制
...etc...
every 0.1 second
every 1 second
every 5 seconds
every 15 seconds
every 1 minute
every 5 minutes
every 15 minutes
every 1 hours
every 2 hours
every 4 hours
every 8 hours
every day, midnight
every 7 days, midnight
every month start
every quarter start
every year start
every 10 years
...etc...

然后给定特定的轴宽度和要显示的特定时间间隔,简单地迭代您的列表,计算它将产生多少刻度,以及如果使用该刻度,刻度将以像素为单位接近多少。这个计算可以用简单的除法来完成。选择刻度数最大的刻度,条件是刻度不能太近。这种朴素的算法应该可以提供完全足够的性能,但是如果您希望优化整个列表,可以使用二进制搜索,而不是迭代整个列表(虽然可能不值得这么做)。

这有点烦人,但我不知道有什么更好的方法,除非你能找到一些库可以帮你做到这一点。我不知道有没有提供这个功能的库,但如果你不想自己写这个,肯定有很多开源项目做了类似的事情,你可以从中获取代码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1806077

复制
相关文章
绘制刻度尺
上面的代码,其实可以进一步提炼,比如 25 ,可以设置为 const OFFSET_NUMBER = 25。感兴趣的读者可以对其进行优化。
Jimmy_is_jimmy
2023/08/14
3330
绘制刻度尺
在Swift中创建可缩放的图像视图
没有什么比完美的图片更能让你的应用程序熠熠生辉,但如果你想让你的应用程序用户真正参与并与图片互动呢?也许他们想放大、平移、掌握这些图像?
玖柒的小窝
2021/11/05
5.7K0
高仿剪映视频多轨剪辑页实现
剪映是当下比较火的一款手机视频剪辑工具,由抖音官方推出,可用于手机短视频的剪辑制作,拥有强大的多轨编辑能力。其中视频剪辑页用于剪辑的View拥有出色的交互性,很考验Android的基础能力,值得拿出来学习一下。   观察剪映的视频剪辑页面,可见主要有时间轴、视频轨道、时间游标和预览窗口四部分组成。时间轴用于展示当前的时间长度和时间刻度,通过缩放手势可以改变最小刻度值,拖动可以对音视频进行seek。视频轨道用于显示轨道在时间轴上的长度、以及轨道信息,同时视频轨道会显示对应时间的帧图像,而音频轨道则会显示波形图。时间游标会固定在整个View的中间位置,虽然叫它游标,但实际上并不会移动,只能通过移动时间轴和视频轨道来表示当前的时间位置。预览窗口用于显示视频帧,通常是SurfaceView或TextureView,比较简单,非本文的重点。
阿利民
2022/05/16
1.6K0
高仿剪映视频多轨剪辑页实现
在原图片上绘制图案和文字以及缩放大小。
from PIL import Image, ImageDraw img = Image.open(r'C:\Users\xpp\Desktop\lena.jpg') draw = ImageDraw.Draw(img) width, height = img.size draw.arc( (0, 0, width-1, height-1), 0, 360, fill='blue') img.save(r'C:\Users\xpp\Desktop\circle.jpg') from PIL impo
裴来凡
2022/05/28
1.1K0
在原图片上绘制图案和文字以及缩放大小。
SkeyeVSS综合安防视频云服监控录像回放控制之自定义可拖动时间轴组件
SkeyeVSS综合安防视频云服务通过接入SkeyeRMS录像服务器实现对系统里的摄像机等设备录像,通过自定义的时间轴组件对录像记录进行加载渲染,播放器回调时间与下面时间轴相互联动,集拖动、点击、缩放、无限加载等于一体的时间轴组件。
Openskeye
2023/04/06
1.2K0
Visio绘制时间轴、日程进度图的方法
  在很多学习、工作场合中,我们往往需要绘制如下所示的一些带有具体时间进度的日程安排、工作流程、项目进展等可视化图表。
疯狂学习GIS
2022/12/18
2.3K0
Visio绘制时间轴、日程进度图的方法
Perl 版Circos -基础篇-核型和刻度、标签的绘制
在绘制之前,先向大家介绍一下circos绘图的基本组成,circos绘图组成示意图如下:
作图丫
2022/03/28
1.4K0
Perl 版Circos -基础篇-核型和刻度、标签的绘制
在 React 中缩放、裁剪和缩放图像
在本文中,我们将了解如何使用 Cropper.js 在 React Web 应用中裁剪图像。尽管我们不会将这些图像上传到远程服务器进行存储,但是很容易就能完成这个任务。
疯狂的技术宅
2020/02/26
6.3K0
在 React 中缩放、裁剪和缩放图像
纯前端绘制精美时间轴-Timesheet.js
项目地址: https://github.com/sbstjn/timesheet.js 效果: 代码: <!DOCTYPE html> <html> <head> <meta charset='utf-8'> <meta content='IE=edge,chrome=1' http-equiv='X-UA-Compatible'> <title>Timesheet.js - Open time tables with HTML, JavaScript and CSS …</t
周星星9527
2022/05/16
4.9K0
纯前端绘制精美时间轴-Timesheet.js
Echarts数据可视化全解注释
github地址:https://github.com/626626cdllp/echarts
全栈程序员站长
2022/09/09
11.1K0
深入研究Apache Flink中的可缩放状态
•本来打算写一个flink源码分析的系列文章,但由于事情太多,又不太想输出低质量的文章,所以开始看一些好的flink相关博客,本文译自https://www.ververica.com/blog/apache-flink-at-mediamath-rescaling-stateful-applications ;•flink中state的划分和介绍;•flink 中operator state在什么时候会进行rescale以及如何进行rescale?;•flink 中keyed state的when and how?。
山行AI
2021/03/24
1.6K0
QCustomPlot使用
Qt之QCustomPlot概述 QCustomPlot使用手册(一) QCustomPlot使用手册(二) QCustomPlot使用手册(三) QCustomPlot使用手册(四)
全栈程序员站长
2022/11/02
3.7K0
ICLR20 | GraphZoom:可缩放图嵌入
今天给大家介绍康奈尔大学和密西根理工大学发表在ICLR2020上的 一篇论文,该论文指出:现有图嵌入模型在训练期间不能很好的合并节点属性信息,模型可能会受到节点属性噪声的干扰,而且由于图嵌入模型的高计算复杂度和内存使用量,很少有模型能够应用到大图上。针对以上问题,该论文提出了一种用于提高无监督图嵌入算法准确性和可伸缩性的多级框架—GraphZoom。通过实验证明,与最新的无监督图嵌入方法相比,GraphZoom可以显著提高分类精度并且极快加速整个图嵌入过程。
DrugAI
2021/02/01
5190
ICLR20 | GraphZoom:可缩放图嵌入
iOS 一个可滑动缩放的轮播图
yscroll.gif 为了做到这个效果没少走弯路,之前一直使用TableViewHeaderView来做这个,尝试了半天,结果不行。后来去看百度中一张的下拉放大怎么实现的。看到别人使用contentInset....哎、恍然大悟! 写完后才发现,原来并不是想象的那么难嘛!下面说几个注意的点。当然,我已经封装好了。你只需要不多的代码就能搞定啦!有兴趣的朋友去我的Git去下载DEMO就行啦,喜欢给个Star~ 首先,想要下拉缩放上面的轮播图,你得把滑动的Offset传给轮播图。 //告诉drag
Raindew
2018/06/14
1.6K0
网友需求系列01-Python-matplotlib定制化刻度(主副)绘制
今天我们开始「粉丝要求绘图系列」的第一篇推文 ,这个系列我会筛选出需求较多的一类图进行绘制讲解,当然,绘图的数据我们尽可能的全部分享出来(即使涉及一些论文数据,我们也会根据情况进行虚构处理的),本期的推文重要涉及的知识点如下:
DataCharm
2021/02/22
1.6K0
网友需求系列01-Python-matplotlib定制化刻度(主副)绘制
在iOS中怎样创建可展开的Table View?(上)
几乎所有的app都有一个共同特征,它们向用户提供了多个视图控制器来导航和工作.这些视图控制器可以用在很多方面,例如,简单地显示某种信息在屏幕上,或者从用户的输入收集复杂的数据.为不同功能的app创建新的视图控制器经常是强制性的,并且好几次都是有点让人退缩的任务.然而,如果你只是使用可展开的tableview,有时也可能避免创建视图控制器(以及在storyboard中它们各自的场景).
hrscy
2018/08/30
1.8K0
在iOS中怎样创建可展开的Table View?(上)
【ProPlot库】ProPlot3兰伯特投影-可添加刻度(三)
虽然 cartopy 下的 Plate Carrée 投影使用方便,但中纬度下使用 Lambert 投影能更好的呈现真实的地图。用一个正圆锥切于或割于球面,将地球面投影到圆锥面上,然后沿一母线展开成平面。下图是使用proplot绘制的最终效果:
自学气象人
2022/10/09
2K0
【ProPlot库】ProPlot3兰伯特投影-可添加刻度(三)
绘制折线图的几个小技巧
折线图通常是用来表达某个数值指标的波动特征,表现的是一种时间维度下的变化。那么问题来了,读者在使用Python绘制时间维度的折线图时是否遇到过这样的问题:怎么让时间轴表现的不拥挤,又能够友好地呈现呢?就如下图的方式:
1480
2019/08/06
3.5K0
JAVA通过BufferedImage进行图片的绘制,缩放,裁剪,水印等操作
最近开发当中,通过JAVA对图片进行了很多的操作,之前很少接触这方面的知识,特此记录下来
海加尔金鹰
2020/06/08
13.1K0
点击加载更多

相似问题

D3js在可缩放时间轴上改变刻度

11

刻度可绘制-是setImageLevel规定的刻度吗?

12

在复合可绘制Android上实现缩放动画

112

缩放可绘制资源

10

在Python线图中在日期/时间轴上设置刻度

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文