You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为svg-graph gem生成的图表各组件设置自定义颜色?

自定义svg-graph图表组件颜色的解决方法

当数据系列数量超过gem默认的颜色池后,后续系列会默认显示黑色,你可以通过两种方式自定义颜色:

1. 单个数据系列单独指定颜色

调用add_data时,直接在参数哈希里加入:fill(柱体填充色)和:stroke(柱体边框色)参数,支持十六进制颜色值或标准颜色名称:

require 'SVG/Graph/Bar'

x_axis = ['1-10', '10-30', '30-50', '50-70', 'older']

options = {
  :width             => 640,
  :height            => 300,
  :stack             => :side,
  :fields            => x_axis,
  :graph_title       => "kg per head and year chocolate consumption",
  :show_graph_title  => true,
  :show_x_title      => true,
  :x_title           => 'Age in years',
  :show_y_title      => true,
  :y_title           => 'kg/year',
  :y_title_location  => :end,
  :no_css            => true
}

male_data   = [2, 4, 6, 4, 2]
female_data = [1, 5, 4, 5, 2.7]

g = SVG::Graph::Bar.new(options)

# 给Female系列设置粉色填充和深色边框
g.add_data( {
    :data => female_data,
    :title => "Female",
    :fill => "#ff6b6b",
    :stroke => "#e05555"
  })
# 给Male系列设置蓝绿色填充和深色边框
g.add_data( {
    :data => male_data,
    :title => "Male",
    :fill => "#4ecdc4",
    :stroke => "#3bb8ae"
  })

File.open('bar.svg', 'w') {|f| f.write(g.burn_svg_only)}

2. 全局预设颜色池

如果需要添加大量数据系列,逐个设置颜色太麻烦,可以在初始化图表时,通过:colors选项传入一组颜色,gem会按顺序自动为每个数据系列分配颜色:

options = {
  :width             => 640,
  :height            => 300,
  :stack             => :side,
  :fields            => x_axis,
  :graph_title       => "kg per head and year chocolate consumption",
  :show_graph_title  => true,
  :show_x_title      => true,
  :x_title           => 'Age in years',
  :show_y_title      => true,
  :y_title           => 'kg/year',
  :y_title_location  => :end,
  :no_css            => true,
  # 预设5种颜色,覆盖多个数据系列需求
  :colors => ["#ff6b6b", "#4ecdc4", "#45b7d1", "#96ceb4", "#ffcc5c"]
}

# 后续添加数据系列无需单独设置颜色,自动使用预设数组里的颜色
g.add_data( { :data => female_data, :title => "Female" })
g.add_data( { :data => male_data, :title => "Male" })
# 新增系列也会沿用预设颜色,不会变黑
g.add_data( { :data => [3,5,7,5,3], :title => "Child" })

补充说明

  • 若是线条类图表(比如SVG::Graph::Line),主要通过:stroke设置线条颜色,若需要填充线条下方区域,也可设置:fill参数。
  • 颜色值支持多种格式:十六进制(#ff0000)、RGB(rgb(255,0,0))、HSL(hsl(0,100%,50%))或标准颜色名称(red)。

内容的提问来源于stack exchange,提问作者Veron13

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 16:53:20