千相千面图形语法

在 Flutter 可视化库 Graphic 的新版本中,优化了声明式定义的语法,使其更好的体现图形语法的本质。

 

本文通过 Graphic 的图形语法定义变换,一步步将柱状图演变为饼图,展示图形语法的灵活丰富。同时也让初学者了解图形语法基本概念。

如果你从未接触过图形语法,不影响本文的阅读。本文可以看作 Graphic 的入门教程。

柱状图和饼图都是数据可视化中常见的类型,它们乍一看迥异,但在图形语法中,却有着相同的本质,这是为什么?让我们从柱状图一步步变换成饼图,来了解其中的缘由。

首先从最常见的柱状图开始说起。数据采用和 ECharts 的入门示例 一样:

const data = [
  {'category': 'Shirts', 'sales': 5},
  {'category': 'Cardigans', 'sales': 20},
  {'category': 'Chiffons', 'sales': 36},
  {'category': 'Pants', 'sales': 10},
  {'category': 'Heels', 'sales': 10},
  {'category': 'Socks', 'sales': 20},
];

声明式定义

Graphic 采用声明式定义,所有的可视化语法都在图表组件 Chart 的构造函数中体现:

Chart(
  data: data,
  variables: {
    'category': Variable(
      accessor: (Map map) => map['category'] as String,
    ),
    'sales': Variable(
      accessor: (Map map) => map['sales'] as num,
    ),
  },
  elements: [IntervalElement()],
  axes: [
    Defaults.horizontalAxis,
    Defaults.verticalAxis,
  ],
)

数据与变量

图表的数据通过 data 字段引入,可以是任意类型的数组。在图表的内部,这些数据项将被转换成标准的 Tuple 类型。数据项如何转换为 Tuple 中的字段值则由变量(Variable)定义。

从代码可以看出,定义的语法是很简短的,但 variables 却占据了一半篇幅。Dart 是一种类型严格的语言,为了能允许任意类型输入数据,详细的 Variable 定义是必不可少的。

几何元素

图形语法最重要的特点是区分了抽象的数据图(Graph)和具体的图形(Graphic)。

比如,数据描述的是一段区间(Interval)还是一个单独的点(Point),这称之为 Graph;而在图上是表现为长条还是三角,多高多宽,这称之为 Graphic。生成 Graph 和 Graphic 的环节分别被称之为几何(Geometry)和具象(Aesthetic)。

Graph 和 Graphic 的概念,触达了数据与图形之间的本质关系,是图形语法跳出了传统图表分类束缚的关键。

而承载这两者定义称为几何元素(GeomElement)。它的类型决定了 Graph,分为:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python可以通过使用PIL(Python Imaging Library)库来对大量图片进行拼接,从而生成千面图。 首先,我们需要导入PIL库。可以使用以下命令导入PIL库: ```python from PIL import Image ``` 接下来,我们需要读取大量图片并进行拼接。假设我们有一组图片存储在一个文件夹中,并且这些图片都具有同的大小。我们可以使用以下代码来读取图片并进行拼接: ```python import os def join_images(folder_path): images = [] for filename in os.listdir(folder_path): if filename.endswith(".jpg") or filename.endswith(".png"): image_path = os.path.join(folder_path, filename) image = Image.open(image_path) images.append(image) width = images[0].width height = images[0].height * len(images) result_image = Image.new("RGB", (width, height)) for i, image in enumerate(images): result_image.paste(image, (0, i * height)) result_image.save("result_image.jpg") ``` 在上述代码中,我们首先遍历文件夹中的每个文件,将`.jpg`和`.png`格式的图片读取并添加到`images`列表中。然后,我们计算拼接后图片的宽度和高度,并创建一个新的`result_image`对象。接下来,我们使用循环将每个图片依次粘贴到`result_image`中,并指定粘贴的坐标。最后,我们保存拼接后的结果图片为`result_image.jpg`。 通过以上步骤,我们可以使用Python对大量图片进行拼接,生成千面图。以上代码仅供参考,具体的实现方式可以根据需求进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值