用Vue3和Rough.js绘制一个粗糙的3D条形图

news2024/12/27 11:21:36

Alt

本文由ScriptEcho平台提供技术支持

项目地址:传送门

使用 Rough.js 和 D3.js 绘制粗糙手写风格条形图

应用场景

该代码适用于需要在 Web 应用程序中创建具有粗糙手写风格的条形图的情况。它可以用于数据可视化、信息图表或任何需要以独特和有吸引力的方式呈现数据的场景。

基本功能

此代码段利用 Rough.js 和 D3.js 库,使用粗糙手写风格的线条和形状创建条形图。它包括以下功能:

  • 使用 D3.js 定义数据、比例和坐标轴。
  • 使用 Rough.js 绘制粗糙的条形,具有可配置的粗糙度和填充重量。
  • 使用 D3.js 添加标签和标题。

功能实现步骤及关键代码分析

1. 加载外部脚本

const jsUrls = [
  'https://cdnjs.cloudflare.com/ajax/libs/d3/5.15.0/d3.min.js',
  'https://cdnjs.cloudflare.com/ajax/libs/rough.js/3.1.0/rough.js',
]
await Promise.all(jsUrls.map((jsUrl) => loadJavascript(jsUrl)))

此代码加载 D3.js 和 Rough.js 库,这是创建粗糙条形图所必需的。

2. 定义数据和比例

const data = [
  { name: 'Fruit', value: 10 },
  { name: 'Meat', value: 8 },
  { name: 'Vegetable', value: 15 },
]

const x = d3
  .scaleBand()
  .range([0, width - margin.left - margin.right])
  .domain(data.map((d) => d.name))
  .padding(0.25)

const y = d3
  .scaleLinear()
  .range([height - margin.top - margin.bottom, 0])
  .domain([0, d3.max(data, (d) => d.value)])

此代码定义了要绘制的条形图的数据,并创建了 x 和 y 比例尺,用于将数据值映射到条形图的坐标。

3. 绘制粗糙的条形

data.forEach((d) => {
  const rect = roughSvg.rectangle(
    x(d.name),
    y(d.value),
    x.bandwidth(),
    height - margin.top - margin.bottom - y(d.value),
    {
      fill: 'dodgerblue',
      roughness: 2,
      fillWeight: 1.1,
    },
  )

  chart.node().appendChild(rect)
})

此代码遍历数据并使用 Rough.js 的 rectangle 方法创建粗糙的条形。它设置了条形的颜色、粗糙度和填充重量等属性。

4. 添加标签和标题

chart
  .selectAll('.label')
  .data(data)
  .join('text')
  .attr('class', 'label')
  .attr(
    'transform',
    (d) => `translate(${x(d.name) + x.bandwidth() / 2}, ${y(d.value) - 10})`,
  )
  .attr('text-anchor', 'middle')
  .text((d) => d.value)

chart
  .selectAll('text')
  .attr('font-size', 22)
  .attr('font-family', 'Schoolbell, cursive, sans-serif')

此代码使用 D3.js 添加条形图上的标签和标题。它将标签放置在每个条形的上方,并设置了文本属性,例如字体大小和字体系列。

总结与展望

开发这段代码的过程让我对使用 Rough.js 和 D3.js 创建粗糙风格的数据可视化有了深入的了解。它展示了如何结合这两个库的优点来创建独特且引人注目的图表。

未来,该卡片功能可以扩展和优化,例如:

  • 添加交互性,允许用户悬停或单击条形以查看更多信息。

  • 探索不同的粗糙度和填充重量设置,以创建各种视觉效果。

  • 集成其他 Rough.js 形状,例如圆圈或多边形,以创建更复杂的图表。

    更多组件:

    在这里插入图片描述


    在这里插入图片描述

    获取更多Echos

    本文由ScriptEcho平台提供技术支持

    项目地址:传送门

    扫码加入AI生成前端微信讨论群:

扫码加入群聊

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1887445.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java StringBuffer类和StringBuilder类

在使用 StringBuffer 类时,每次都会对 StringBuffer 对象本身进行操作,而不是生成新的对象,所以如果需要对字符串进行修改推荐使用 StringBuffer。 StringBuilder 类在 Java 5 中被提出,它和 StringBuffer 之间的最大不同在于 St…

【PYG】Cora数据集分类任务计算损失,cross_entropy为什么不能直接替换成mse_loss

cross_entropy计算误差方式,输入向量z为[1,2,3],预测y为[1],选择数为2,计算出一大坨e的式子为3.405,再用-23.405计算得到1.405MSE计算误差方式,输入z为[1,2,3],预测向量应该是[1,0,0]&#xff0…

IAR工程目录移动报错(改变文件目录结构)

刚开始用IAR,记录一下。 工作中使用华大单片机,例程的文件目录结构太复杂了想精简一点。 1.如果原本的C文件相对工程文件(.eww文件)路径变化了,需要先打开工程,再将所有的.c文件右键Add添加进工程&#xf…

【Godot4.2】Godot中的贝塞尔曲线

概述 通过指定平面上的多个点,然后顺次连接,我们可以得到折线段,如果闭合图形,就可以获得多边形。通过向量旋转我们可以获得圆等特殊图形。 但是对于任意曲线,我们无法使用简单的方式来获取其顶点,好在计…

X-ObjectMount: 对象存储访问接入的新选择

XEOS 自 2017 年发布面世以来,历经 7 年的研发迭代,上个月正式发布了 XSKY SDS 6.4 版本,包含了最新的多站点统一命名空间能力,也标志了 XEOS 在对象存储领域的全方面优势和领先市场地位。 在 XSKY 过去对象存储服务历程里&#…

mysql 命令 —— 查看表信息(show table status)

查询表信息,如整个表的数据量大小、表的索引占用空间大小等 1、查询某个库下面的所有表信息: SHOW TABLE STATUS FROM your_database_name;2、查询指定的表信息: SHOW TABLE STATUS LIKE your_table_name;如:Data_length 显示表…

openGauss真的比PostgreSQL差了10年?

前不久写了MogDB针对PostgreSQL的兼容性文章,我在文中提到针对PostgreSQL而言,MogDB兼容性还是不错的,其中也给出了其中一个能源客户之前POC的迁移报告数据。 But很快我发现总有人回留言喷我,而且我发现每次喷的这帮人是根本不看文…

Python基础003

Python流程控制基础 1.条件语句 内置函数input a input("请输入一段内容:") print(a) print(type(a))代码执行的时候遇到input函数,就会等键盘输入结果,已回车为结束标志,也就时说输入回车后代码才会执行 2.顺序执行…

【问题记录】如何在xftp上查看隐藏文件。

显示隐藏的文件夹 用xftp连接到服务器后,发现有些隐藏的文件夹并未显示出来,通过以下配置,即可使隐藏的文件夹给显示出来。 1.点击菜单栏的"小齿轮"按钮: 2.勾选显示隐藏的文件夹: 3.点击确定即可。

古韵流光:探秘五代耀州窑青瓷提梁倒灌壶的奇妙设计

在陕西历史博物馆的静谧展厅中,一件千年前的瓷器静静陈列,它不仅承载着历史的沉淀,更凝聚了古代匠人的非凡智慧。这便是五代时期的耀州窑青瓷提梁倒灌壶,一件巧夺天工的艺术品,其独特的设计至今仍让人叹为观止。 一、倒…

算法mq 交互通用校验模块设计

背景 当前与算法交互均通过rocketMQ异步交互,绝大部分场景一条请求mq消息应对应一条返回mq,但由于各种原因(消息积压、程序bug),可能会导致返回mq超时未返回或者消息丢失。工程侧针对一些重要场景 case by case的通过…

【web3】分享一个web入门学习平台-HackQuest

前言 一直想进入web3行业,但是没有什么途径,偶然在电鸭平台看到HackQuest的共学营,发现真的不错,并且还接触到了黑客松这种形式。 链接地址:HackQuest 平台功能 学习路径:平台有完整的学习路径&#xff…

VS2022+Qt+OpenCV Debug模式下,循环中格式转换引起的内存异常问题 debug_heap.cpp

文章目录 前言一、问题二、报错1.提示图片2.提示堆栈3.反汇编位置 三、解决办法总结 前言 最近在使用VS2022,C,OpenCV,Qt开发时,遇到了一个疑难杂症-在循环中执行字符串格式转换会触发内存异常,经过痛苦的排查过程&am…

Ubuntu下反弹shell的思考

目录 Ubuntu的命令执行环境 bash (Bourne Again SHell): sh (Bourne SHell): dash (Debian Almquist SHell): 它们之间的关系: 可能遇到的问题 一、脚本权限问题 二、命令执行环境(shell解释器)问题 如何解决? 1.修改/bin/sh软连接的指向为bas…

C++字体库开发

建议根据字体需求,多个组合使用。高度定制可基于freeTypeharfbuzz基础库完成。 GitHub - GNOME/pango: Read-only mirror of https://gitlab.gnome.org/GNOME/pango GitHub - googlefonts/fontview: Demo app that displays fonts with a free/libre/open-source …

Java_多线程:线程和死锁

一、线程 1、线程的状态流转 新建状态(New):当线程对象对创建后,即进入了新建状态,如:Thread t new MyThread();就绪状态(Runnable):当调用线程对象的start()方法&…

JAVA极简图书管理系统,初识springboot后端项目

前提条件: 具备基础的springboot 知识 Java基础 废话不多说! 创建项目 配置所需环境 将application.properties>application.yml 配置以下环境 数据库连接MySQL 自己创建的数据库名称为book_test server:port: 8080 spring:datasource:url:…

搜索型数据库的技术发展历程与趋势前瞻

概述 随着数字科技的飞速发展和信息量的爆炸性增长,搜索引擎已成为我们获取信息的首选途径之一,典型的代表厂商如 Google。然而,随着用户需求的不断演变,传统的搜索技术已经无法满足人们对信息的实时性、个性化和多样性的需求。 …

C++基础知识-编译相关

记录C语言相关的基础知识 1 C源码到可执行文件的四个阶段 预处理(.i)、编译(.s)、汇编(.obj)、链接。 1.1 预处理 预处理阶段,主要完成宏替换、文件展开、注释删除、条件编译展开、添加行号和文件名标识,输出.i/.ii预处理文件。 宏替换,…

AI的价值——不再那么“废”人,保险行业用AI人员流失减少20%

最近有个热点挺让人唏嘘的,某咖啡店员工对顾客泼咖啡粉,我们对于这个事件不予评价。但是对员工这种情绪崩溃,我们所接触的行业中也有不少例子,比如保险行业,相信大家经常会被打保险电话,这类电话很容易就被…