Условно залить цветом координаты пути фигуры в Vega-lite

Я пытаюсь заполнить диаграмму координат пути на основе значения. но не в силах это сделать. Это возможно в SVG и попробовать то же самое в vega-lite. вариант на основе SVG приведен ниже. ссылка: [1]: https://codepen.io/thiru_tbl/pen/gOJBozb

Но возможно ли в vega-lite такое, как «иллюстрированная диаграмма дробей»? Код mt vega lite приведен ниже. скажем, мое значение данных равно 49. цвет должен быть заполнен до 49.

{
 "$schema": "https://vega.github.io/schema/vega-lite/v5.json",
 "data": { "name": "mydata",
"values": [
  {"Pic": "Pic", "Value":49}
]
},

"vconcat": [
{

  "encoding": {
    "x": {
      "field": "Pic",
      "type": "nominal"
    }
  },
  "layer": [
    {
      "mark": {"type": "point"}, 
      "encoding": {
        "y": {
          "field": "Value",
          "type": "quantitative",
          "scale": {"domain": [0, 100]}
        }

      }
    },
    {
      "mark": {
        "type": "point",
        "shape": "M -3 0 L 15 0 L 3 -73 L 3 -73 L -3 -1 L -3 0",
        "fill": "#fdfd"
        
      },
      "encoding": {"y": {"datum": 0}}
      
      
},
{
      "data": {"name": "mydata"},
      "encoding": {
        "y": {"field": "Value", "type": "quantitative"}, 
        "x": {}
      
      },
      "layer": [
        
        {"mark": {"type": "rule", "x2":100},
        "encoding": {
        "y": {"field": "Value", "type": "quantitative"} 
        }
        }
     ]
    },
    {
      "data": {"name": "mydata"},
      "encoding": {
        "y": {"field": "Value", "type": "quantitative"}, 
        "x": {}
      
      },
      "layer": [
        
        {"mark": {"type": "text","align": "left",
  "baseline": "middle",
  "dx": 90, "dy":-0, "size":20},
        "encoding": {
                   "text": {"field": "Value", "type": "quantitative","title": "points"}
               }
        }
     ]
    }

  ]
}
]
}

Вероятно, вам понадобится сделать это именно Вега. Вероятно, вы можете либо создать группу обрезки, либо динамически создать второй SVG для заливки. Оба подхода показаны в этой спецификации: github.com/PBI-David/Deneb-Showcase/blob/main/Gantt%20Chart/‌​…

davidebacci 19.07.2024 09:14
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
85
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете добавить сплошной градиент в свой SVG следующим образом:

{
  "$schema": "https://vega.github.io/schema/vega-lite/v5.json",
  "description": "A simple bar chart with embedded data.",
  "width": 120,
  "height": 330,
  "data": {
    "values": [
      {
        "a": "A",
        "b": 10,
        "c": "M -3 0 L 15 0 L 3 -60 L 3 -60 L -3 -1 L -3 0",
        "d": 0
      }
    ]
  },
  "params": [
    {"name": "colorGradient", "expr": "data('data_0')[0]['b']/100"},
    {
      "name": "test1",
      "update": "{gradient: 'linear', 'x1': 1,      'y1': 1,  'stops': [    {'offset': 0, 'color': 'red'},    {'offset': colorGradient, 'color': 'red'},    {'offset': colorGradient, 'color': 'white'}  ]}"
    }
  ],
  "mark": {
    "type": "point",
    "fill": {"signal": "test1"},
    "opacity": 1,
    "stroke": "black",
    "strokeOpacity": 1,
    "clip": true,
    "color": "black",
    "size": 120,
    "xOffset": -25,
    "yOffset": 0
  },
  "encoding": {
    "color": {"value": "black"},
    "y": {"field": "d", "type": "quantitative", "scale": {"domain": [0, 100]}},
    "shape": {"field": "c", "type": "quantitative", "scale": null}
  }
}

Вот еще один простой пример, где я размещаю SVG в зависимости от процессора, но раскрашиваю его в зависимости от оперативной памяти. Я не видел этого раньше, так что, я думаю, это открывает много возможностей.

{
  "$schema": "https://vega.github.io/schema/vega-lite/v5.json",
  "description": "A simple bar chart with embedded data.",
  "width": 500,
  "height": 330,
  "data": {
    "values": [
      {"LOCATION": "HOUSTON", "RAM": 15, "CPU": 70},
      {"LOCATION": "NY", "RAM": 30, "CPU": 20},
      {"LOCATION": "LA", "RAM": 70, "CPU": 60},
      {"LOCATION": "CHICAGO", "RAM": 90, "CPU": 40}
    ]
  },
  "params": [
    {
      "name": "svg",
      "value": "M14.5 2.49866C14.5 3.60194 11.366 4.49731 7.5 4.49731C3.634 4.49731 0.5 3.60194 0.5 2.49866M14.5 2.49866C14.5 1.39538 11.366 0.5 7.5 0.5C3.634 0.5 0.5 1.39538 0.5 2.49866M14.5 2.49866V12.4922C14.5 13.5955 11.366 14.4908 7.5 14.4908C3.634 14.4908 0.5 13.5956 0.5 12.4923V2.49866M14.5 7.49536C14.5 8.59864 11.366 9.49414 7.5 9.49414C3.634 9.49414 0.5 8.59864 0.5 7.49536"
    }
  ],
  "transform": [
    {"calculate": "datum.RAM/100", "as": "b_calc"},
    {"calculate": "svg", "as": "svg"},
    {
      "calculate": "{gradient: 'linear', 'x1': 1,'y1': 1,  'stops': [{'offset': 0, 'color': 'silver'},{'offset': datum.b_calc, 'color': 'silver'},{'offset': datum.b_calc, 'color': 'white'}]}",
      "as": "fillGradient"
    }
  ],
  "mark": {
    "type": "point",
    "fill": {"expr": "datum.fillGradient"},
    "opacity": 1,
    "stroke": "black",
    "strokeOpacity": 1,
    "clip": true,
    "color": "black",
    "size": 60,
    "xOffset": -35,
    "yOffset": 0
  },
  "encoding": {
    "color": {"value": "black"},
    "x": {"field": "LOCATION", "type": "ordinal"},
    "y": {
      "field": "CPU",
      "type": "quantitative",
      "scale": {"domain": [0, 100]}
    },
    "shape": {"field": "svg", "scale": null}
  }
}

Большое спасибо... он работает нормально и позволяет размещать любые объекты SVG... например, заполнять % в автомобилях... и т. д.

sen 29.07.2024 06:30

Рад, что смог помочь @sen. Конечно, это было веселое испытание!

APB Reports 29.07.2024 09:50

Другие вопросы по теме