Related
i would like to use gradient backgrounds in particles, that is to say, I want the particles to each have a gradient of different colours with some shadows for depth and if at all its possible, i would like to animate the gradeients as well.
I am new to this library and am not sure if this is possible, Thanks!
i have made a simple canvas with circles bouncing around, thats all i have been able to achieve
{
"autoPlay": true,
"background": {
"color": {
"value": "#000"
},
"image": "",
"position": "",
"repeat": "",
"size": "",
"opacity": 1
},
"backgroundMask": {
"composite": "destination-out",
"cover": {
"color": {
"value": "#fff"
},
"opacity": 1
},
"enable": false
},
"defaultThemes": {},
"delay": 0,
"fullScreen": {
"enable": true,
"zIndex": -1
},
"detectRetina": true,
"duration": 0,
"fpsLimit": 120,
"interactivity": {
"detectsOn": "window",
"events": {
"onClick": {
"enable": false,
"mode": []
},
"onDiv": {
"selectors": [],
"enable": false,
"mode": [],
"type": "circle"
},
"onHover": {
"enable": false,
"mode": [],
"parallax": {
"enable": false,
"force": 2,
"smooth": 10
}
},
"resize": {
"delay": 0.5,
"enable": true
}
},
"modes": {
"attract": {
"distance": 200,
"duration": 0.4,
"easing": "ease-out-quad",
"factor": 1,
"maxSpeed": 50,
"speed": 1
},
"bounce": {
"distance": 200
},
"bubble": {
"distance": 200,
"duration": 0.4,
"mix": false,
"divs": {
"distance": 200,
"duration": 0.4,
"mix": false,
"selectors": []
}
},
"connect": {
"distance": 80,
"links": {
"opacity": 0.5
},
"radius": 60
},
"grab": {
"distance": 100,
"links": {
"blink": false,
"consent": false,
"opacity": 1
}
},
"push": {
"default": true,
"groups": [],
"quantity": 4
},
"remove": {
"quantity": 2
},
"repulse": {
"distance": 200,
"duration": 0.4,
"factor": 100,
"speed": 1,
"maxSpeed": 50,
"easing": "ease-out-quad",
"divs": {
"distance": 200,
"duration": 0.4,
"factor": 100,
"speed": 1,
"maxSpeed": 50,
"easing": "ease-out-quad",
"selectors": []
}
},
"slow": {
"factor": 3,
"radius": 200
},
"trail": {
"delay": 1,
"pauseOnStop": false,
"quantity": 1
},
"light": {
"area": {
"gradient": {
"start": {
"value": "#ffffff"
},
"stop": {
"value": "#000000"
}
},
"radius": 1000
},
"shadow": {
"color": {
"value": "#000000"
},
"length": 2000
}
}
}
},
"manualParticles": [],
"particles": {
"bounce": {
"horizontal": {
"random": {
"enable": false,
"minimumValue": 0.1
},
"value": 1
},
"vertical": {
"random": {
"enable": false,
"minimumValue": 0.1
},
"value": 1
}
},
"collisions": {
"absorb": {
"speed": 2
},
"bounce": {
"horizontal": {
"random": {
"enable": false,
"minimumValue": 1
},
"value": {
"min": 0.1,
"max": 10
}
},
"vertical": {
"random": {
"enable": false,
"minimumValue": 0.1
},
"value": {
"min": 0.1,
"max": 10
}
}
},
"enable": true,
"mode": "bounce",
"overlap": {
"enable": false,
"retries": 0
}
},
"color": {
"value": "#ff0000",
"animation": {
"h": {
"count": 0,
"enable": false,
"offset": 0,
"speed": 1,
"decay": 0,
"sync": true
},
"s": {
"count": 0,
"enable": false,
"offset": 0,
"speed": 1,
"decay": 0,
"sync": true
},
"l": {
"count": 0,
"enable": false,
"offset": 0,
"speed": 1,
"decay": 0,
"sync": true
}
}
},
"groups": {},
"move": {
"angle": {
"offset": 0,
"value": 90
},
"attract": {
"distance": 200,
"enable": false,
"rotate": {
"x": 3000,
"y": 3000
}
},
"center": {
"x": 50,
"y": 50,
"mode": "percent",
"radius": 0
},
"decay": 0,
"distance": {},
"direction": "none",
"drift": 0,
"enable": true,
"gravity": {
"acceleration": 9.81,
"enable": false,
"inverse": false,
"maxSpeed": 50
},
"path": {
"clamp": true,
"delay": {
"random": {
"enable": false,
"minimumValue": 0
},
"value": 0
},
"enable": false,
"options": {}
},
"outModes": {
"default": "bounce",
"bottom": "bounce",
"left": "bounce",
"right": "bounce",
"top": "bounce"
},
"random": true,
"size": true,
"speed": 8,
"spin": {
"acceleration": 0,
"enable": false
},
"straight": false,
"trail": {
"enable": true,
"length": 3,
"fillColor": {
"value": "#000000"
}
},
"vibrate": false,
"warp": false
},
"number": {
"density": {
"enable": false,
"area": 800,
"factor": 1000
},
"limit": 0,
"value": 14
},
"opacity": {
"random": {
"enable": false,
"minimumValue": 0.1
},
"value": 1,
"animation": {
"count": 0,
"enable": false,
"speed": 0.25,
"decay": 0,
"sync": false,
"destroy": "none",
"startValue": "random"
}
},
"reduceDuplicates": false,
"shadow": {
"blur": 4,
"color": {
"value": "#000"
},
"enable": true,
"offset": {
"x": 0,
"y": 0
}
},
"shape": {
"options": {},
"type": "circle"
},
"size": {
"random": {
"enable": false,
"minimumValue": 1
},
"value": 41,
"animation": {
"count": 0,
"enable": false,
"speed": 5,
"decay": 0,
"sync": false,
"destroy": "none",
"startValue": "random"
}
},
"stroke": {
"width": 0,
"color": {
"value": "#004cff",
"animation": {
"h": {
"count": 0,
"enable": false,
"offset": 0,
"speed": 1,
"decay": 0,
"sync": true
},
"s": {
"count": 0,
"enable": false,
"offset": 0,
"speed": 1,
"decay": 0,
"sync": true
},
"l": {
"count": 0,
"enable": false,
"offset": 0,
"speed": 1,
"decay": 0,
"sync": true
}
}
}
},
"zIndex": {
"random": {
"enable": false,
"minimumValue": 0
},
"value": 0,
"opacityRate": 1,
"sizeRate": 1,
"velocityRate": 1
},
"life": {
"count": 0,
"delay": {
"random": {
"enable": false,
"minimumValue": 0
},
"value": 0,
"sync": false
},
"duration": {
"random": {
"enable": false,
"minimumValue": 0.0001
},
"value": 0,
"sync": false
}
},
"rotate": {
"random": {
"enable": false,
"minimumValue": 0
},
"value": 0,
"animation": {
"enable": false,
"speed": 0,
"decay": 0,
"sync": false
},
"direction": "clockwise",
"path": false
},
"destroy": {
"bounds": {},
"mode": "none",
"split": {
"count": 1,
"factor": {
"random": {
"enable": false,
"minimumValue": 0
},
"value": 3
},
"rate": {
"random": {
"enable": false,
"minimumValue": 0
},
"value": {
"min": 4,
"max": 9
}
},
"sizeOffset": true,
"particles": {}
}
},
"roll": {
"darken": {
"enable": false,
"value": 0
},
"enable": false,
"enlighten": {
"enable": false,
"value": 0
},
"mode": "vertical",
"speed": 25
},
"tilt": {
"random": {
"enable": false,
"minimumValue": 0
},
"value": 0,
"animation": {
"enable": false,
"speed": 0,
"decay": 0,
"sync": false
},
"direction": "clockwise",
"enable": false
},
"twinkle": {
"lines": {
"enable": false,
"frequency": 0.05,
"opacity": 1
},
"particles": {
"enable": false,
"frequency": 0.05,
"opacity": 1
}
},
"wobble": {
"distance": 5,
"enable": false,
"speed": {
"angle": 50,
"move": 10
}
},
"orbit": {
"animation": {
"count": 0,
"enable": false,
"speed": 1,
"decay": 0,
"sync": false
},
"enable": false,
"opacity": 1,
"rotation": {
"random": {
"enable": false,
"minimumValue": 0
},
"value": 45
},
"width": 1
},
"links": {
"blink": false,
"color": {
"value": "#fff"
},
"consent": false,
"distance": 100,
"enable": false,
"frequency": 1,
"opacity": 1,
"shadow": {
"blur": 5,
"color": {
"value": "#000"
},
"enable": false
},
"triangles": {
"enable": false,
"frequency": 1
},
"width": 1,
"warp": false
},
"repulse": {
"random": {
"enable": false,
"minimumValue": 0
},
"value": 0,
"enabled": false,
"distance": 1,
"duration": 1,
"factor": 1,
"speed": 1
}
},
"pauseOnBlur": true,
"pauseOnOutsideViewport": true,
"responsive": [],
"smooth": false,
"style": {},
"themes": [],
"zLayers": 100,
"emitters": []
}
If I change horizontal to vertical here, the axes don't switch:
{
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
"layer": [{
"data": {"values": [
{"x": 0.5, "y": 0},
{"x": 1, "y": 1},
{"x": 2, "y": 2}]},
"mark": {"type": "line", "orient": "horizontal"},
"encoding": {
"x": {"field": "x", "type": "quantitative"},
"y": {"field": "y", "type": "quantitative"},
"color": {"datum": "a"}}
}, {
"data": {"values": [
{"x": 1, "y": 0},
{"x": 2, "y": 1},
{"x": 2.5, "y": 2}]},
"mark": {"type": "line", "orient": "horizontal"},
"encoding": {
"x": {"field": "x", "type": "quantitative"},
"y": {"field": "y", "type": "quantitative"},
"color": {"datum": "b"}}
}
]
}
Why is that? How to get the x-axis and y-axis to switch places?
It's also necessary to switch the "x" and "y" properties of "encoding":
{
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
"layer": [{
"data": {"values": [
{"x": 0.5, "y": 0},
{"x": 1, "y": 1},
{"x": 2, "y": 2}]},
"mark": {"type": "line", "orient": "vertical"},
"encoding": {
"x": {"field": "y", "type": "quantitative"},
"y": {"field": "x", "type": "quantitative"},
"color": {"datum": "a"}}
}, {
"data": {"values": [
{"x": 1, "y": 0},
{"x": 2, "y": 1},
{"x": 2.5, "y": 2}]},
"mark": {"type": "line", "orient": "vertical"},
"encoding": {
"x": {"field": "y", "type": "quantitative"},
"y": {"field": "x", "type": "quantitative"},
"color": {"datum": "b"}}
}
]
}
Good time of day!
all text - https://github.com/vega/vega-lite/issues/5697
When building data in a block, I would like to change the font size and position of the text in the block. Used the documentation -https://vega.github.io/vega-lite/docs/title.html, but it does not work.
block:
{
"mark": "text"
"encoding": {
"text": {"field": "z", "type": "quantitative"}
"color": {"value": "black"}
"fontSize": 40
}
Changing the position will allow for the addition of a second text:
full code:
{
"$schema": "https://vega.github.io/schema/vega-lite/v2.4.3.json",
"config": {"view": {"height": 300, "width": 400}},
"data": {
"values": [
{"x": 0, "y": 0, "z": 0},
{"x": 1, "y": 0, "z": 1},
{"x": 2, "y": 0, "z": 4},
#{"x": 3, "y": 0, "z": 9},
{"x": 4, "y": 0, "z": 16},
#{"x": 5, "y": 0, "z": 25},
{"x": 0, "y": 1, "z": 1},
{"x": 1, "y": 1, "z": 2},
{"x": 2, "y": 1, "z": 5},
{"x": 3, "y": 1, "z": 10},
#{"x": 4, "y": 1, "z": 17},
{"x": 5, "y": 1, "z": 26}]
},
"encoding": {
"x": {"field": "x", "type": "ordinal", title: "X"}
"y": {"field": "y", "type": "ordinal", title: "Y"}
}
"layer": [
{
"mark": "rect"
from: {data: "values"}
"encoding": {
"color": {
"field": "z"
"scale": {"scheme": "redyellowgreen"}
"type": "quantitative"
}
}
}
{
"mark": "text"
"encoding": {
"text": {"field": "z", "type": "quantitative"}
"color": {"value": "black"}
"fontSize": 40
}
}
]
}
2 I'd like a temperature map without spaces. It is possible if create a variable to count all x by "groupby":[y]
Help me please.
There is no fontSize encoding, but you can set a fontSize mark property:
{
"mark": {"type": "text", "fontSize": 40},
"encoding": {
"text": {"field": "z", "type": "quantitative"},
"color": {"value": "black"}
}
}
To offset text vertically, you can use the dy mark property, which specifies a number of pixels by which to vertically offset the text:
{
"mark": {"type": "text", "fontSize": 20, "dy": -20},
"encoding": {
"text": {"value": "text"},
"color": {"value": "black"}
}
}
As for computing new x values to fill-in spaces, you can do this with a Window Transform.
Here is a modified version of your example that puts all of this together (view in vega editor):
{
"$schema": "https://vega.github.io/schema/vega-lite/v2.4.3.json",
"config": {"view": {"height": 300, "width": 400}},
"data": {
"values": [
{"x": 0, "y": 0, "z": 0},
{"x": 1, "y": 0, "z": 1},
{"x": 2, "y": 0, "z": 4},
{"x": 4, "y": 0, "z": 16},
{"x": 0, "y": 1, "z": 1},
{"x": 1, "y": 1, "z": 2},
{"x": 2, "y": 1, "z": 5},
{"x": 3, "y": 1, "z": 10},
{"x": 5, "y": 1, "z": 26}
]
},
"transform": [
{"window": [{"op": "count", "field": "x", "as": "x2"}], "groupby": ["y"]}
],
"encoding": {
"x": {"field": "x2", "type": "ordinal", "title": "X"},
"y": {"field": "y", "type": "ordinal", "title": "Y"}
},
"layer": [
{
"mark": "rect",
"encoding": {
"color": {
"field": "z",
"scale": {"scheme": "redyellowgreen"},
"type": "quantitative"
}
}
},
{
"mark": {"type": "text", "fontSize": 20, "dy": -20},
"encoding": {
"text": {"value": "text"},
"color": {"value": "black"}
}
},
{
"mark": {"type": "text", "fontSize": 40, "dy": 20},
"encoding": {
"text": {"field": "z", "type": "quantitative"},
"color": {"value": "black"}
}
}
]
}
I am trying to apply the ng class in angularjs with such a condition that if the
value of the json is 1 to achieve the color of green, 2 would be red, 0 will be white. But for some reason I am not able to get the result. I also have a jsfiddle if you want to look the code more clearly.
https://jsfiddle.net/0xsv2aq3/42/
Any help will really be appreciate it. Thank you
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
</head>
<script>
var myApp = angular.module('myApp',[]);
function MyCtrl($scope) {
$scope.schedule =
{
"days": [
{
"day": "2018-12-09T00:00:00",
"entries": [
{
"name": "Adam D",
"value": 1,
"parts": [
"EG"
]
},
{
"name": "Chris S",
"value": 0,
"parts": []
},
{
"name": "Debbie J",
"value": 2,
"parts": []
},
{
"name": "Dennis S",
"value": 1,
"parts": [
"Lead"
]
},
{
"name": "Jamie W",
"value": 2,
"parts": []
},
{
"name": "Jen C",
"value": 1,
"parts": [
"Melody"
]
},
{
"name": "Joe T",
"value": 1,
"parts": [
"Drums"
]
},
{
"name": "Karen B",
"value": 1,
"parts": [
"Melody"
]
},
{
"name": "Kristene B",
"value": 1,
"parts": [
"Melody"
]
},
{
"name": "Lisa R",
"value": 1,
"parts": [
"3rd"
]
},
{
"name": "Mike B",
"value": 1,
"parts": [
"AG"
]
},
{
"name": "Nancy S",
"value": 0,
"parts": []
},
{
"name": "Paul N",
"value": 2,
"parts": []
},
{
"name": "Scott J",
"value": 0,
"parts": []
},
{
"name": "Scott J",
"value": 2,
"parts": []
},
{
"name": "Trisha S",
"value": 0,
"parts": []
}
]
},
{
"day": "2018-12-16T00:00:00",
"entries": [
{
"name": "Adam D",
"value": 1,
"parts": [
"EG"
]
},
{
"name": "Chris S",
"value": 1,
"parts": [
"Keys 2"
]
},
{
"name": "Debbie J",
"value": 2,
"parts": []
},
{
"name": "Dennis S",
"value": 1,
"parts": [
"Lead"
]
},
{
"name": "Jamie W",
"value": 1,
"parts": [
"Melody"
]
},
{
"name": "Jen C",
"value": 0,
"parts": []
},
{
"name": "Joe T",
"value": 1,
"parts": [
"Drums"
]
},
{
"name": "Karen B",
"value": 0,
"parts": []
},
{
"name": "Kristene B",
"value": 0,
"parts": []
},
{
"name": "Lisa R",
"value": 1,
"parts": [
"3rd"
]
},
{
"name": "Mike B",
"value": 1,
"parts": [
"AG"
]
},
{
"name": "Nancy S",
"value": 1,
"parts": [
"2nd"
]
},
{
"name": "Paul N",
"value": 1,
"parts": [
"3rd"
]
},
{
"name": "Scott J",
"value": 2,
"parts": []
},
{
"name": "Trisha S",
"value": 0,
"parts": []
}
]
},
{
"day": "2018-12-23T00:00:00",
"entries": [
{
"name": "Adam D",
"value": 1,
"parts": [
"EG"
]
},
{
"name": "Chris S",
"value": 0,
"parts": []
},
{
"name": "Debbie J",
"value": 2,
"parts": []
},
{
"name": "Dennis S",
"value": 1,
"parts": [
"Lead"
]
},
{
"name": "Jamie W",
"value": 0,
"parts": []
},
{
"name": "Jen C",
"value": 1,
"parts": [
"Melody"
]
},
{
"name": "Joe T",
"value": 1,
"parts": [
"Drums"
]
},
{
"name": "Karen B",
"value": 1,
"parts": [
"Melody"
]
},
{
"name": "Kristene B",
"value": 2,
"parts": []
},
{
"name": "Lisa R",
"value": 2,
"parts": []
},
{
"name": "Mike B",
"value": 2,
"parts": []
},
{
"name": "Nancy S",
"value": 0,
"parts": []
},
{
"name": "Paul N",
"value": 2,
"parts": []
},
{
"name": "Scott J",
"value": 1,
"parts": [
"AG"
]
},
{
"name": "Scott J",
"value": 1,
"parts": [
"AG"
]
},
{
"name": "Trisha S",
"value": 1,
"parts": [
"2nd"
]
}
]
},
{
"day": "2018-12-30T00:00:00",
"entries": [
{
"name": "Adam D",
"value": 1,
"parts": [
"EG"
]
},
{
"name": "Chris S",
"value": 1,
"parts": [
"Keys 2"
]
},
{
"name": "Debbie J",
"value": 2,
"parts": []
},
{
"name": "Dennis S",
"value": 1,
"parts": [
"Lead"
]
},
{
"name": "Jamie W",
"value": 0,
"parts": []
},
{
"name": "Jen C",
"value": 1,
"parts": [
"Melody"
]
},
{
"name": "Joe T",
"value": 1,
"parts": [
"Drums"
]
},
{
"name": "Karen B",
"value": 1,
"parts": [
"Melody"
]
},
{
"name": "Kristene B",
"value": 2,
"parts": []
},
{
"name": "Lisa R",
"value": 2,
"parts": []
},
{
"name": "Mike B",
"value": 2,
"parts": []
},
{
"name": "Nancy S",
"value": 1,
"parts": [
"2nd"
]
},
{
"name": "Paul N",
"value": 2,
"parts": []
},
{
"name": "Scott J",
"value": 2,
"parts": []
},
{
"name": "Trisha S",
"value": 0,
"parts": []
}
]
},
{
"day": "2019-01-06T00:00:00",
"entries": [
{
"name": "Adam D",
"value": 1,
"parts": [
"EG"
]
},
{
"name": "Chris S",
"value": 0,
"parts": []
},
{
"name": "Debbie J",
"value": 1,
"parts": [
"Melody"
]
},
{
"name": "Dennis S",
"value": 1,
"parts": [
"Lead"
]
},
{
"name": "Jamie W",
"value": 0,
"parts": []
},
{
"name": "Jen C",
"value": 0,
"parts": []
},
{
"name": "Joe T",
"value": 1,
"parts": [
"Drums"
]
},
{
"name": "Karen B",
"value": 1,
"parts": [
"Melody"
]
},
{
"name": "Kristene B",
"value": 2,
"parts": []
},
{
"name": "Lisa R",
"value": 1,
"parts": [
"3rd"
]
},
{
"name": "Mike B",
"value": 2,
"parts": []
},
{
"name": "Nancy S",
"value": 0,
"parts": []
},
{
"name": "Paul N",
"value": 2,
"parts": []
},
{
"name": "Scott J",
"value": 1,
"parts": [
"AG"
]
},
{
"name": "Trisha S",
"value": 0,
"parts": []
}
]
},
{
"day": "2019-01-13T00:00:00",
"entries": [
{
"name": "Adam D",
"value": 1,
"parts": [
"EG"
]
},
{
"name": "Chris S",
"value": 1,
"parts": [
"Keys 2"
]
},
{
"name": "Debbie J",
"value": 2,
"parts": []
},
{
"name": "Dennis S",
"value": 1,
"parts": [
"Lead"
]
},
{
"name": "Jamie W",
"value": 1,
"parts": [
"Melody"
]
},
{
"name": "Jen C",
"value": 0,
"parts": []
},
{
"name": "Joe T",
"value": 1,
"parts": [
"Drums"
]
},
{
"name": "Karen B",
"value": 0,
"parts": []
},
{
"name": "Kristene B",
"value": 0,
"parts": []
},
{
"name": "Lisa R",
"value": 1,
"parts": [
"3rd"
]
},
{
"name": "Mike B",
"value": 0,
"parts": []
},
{
"name": "Nancy S",
"value": 1,
"parts": [
"2nd"
]
},
{
"name": "Paul N",
"value": 2,
"parts": []
},
{
"name": "Scott J",
"value": 1,
"parts": [
"AG"
]
},
{
"name": "Scott J",
"value": 1,
"parts": [
"AG"
]
},
{
"name": "Trisha S",
"value": 0,
"parts": []
}
]
},
{
"day": "2019-01-20T00:00:00",
"entries": [
{
"name": "Adam D",
"value": 1,
"parts": [
"EG"
]
},
{
"name": "Chris S",
"value": 1,
"parts": [
"Keys 2"
]
},
{
"name": "Debbie J",
"value": 2,
"parts": []
},
{
"name": "Dennis S",
"value": 1,
"parts": [
"Lead"
]
},
{
"name": "Jamie W",
"value": 1,
"parts": [
"Melody"
]
},
{
"name": "Jen C",
"value": 1,
"parts": [
"Melody"
]
},
{
"name": "Joe T",
"value": 1,
"parts": [
"Drums"
]
},
{
"name": "Karen B",
"value": 1,
"parts": [
"Melody"
]
},
{
"name": "Kristene B",
"value": 0,
"parts": []
},
{
"name": "Lisa R",
"value": 0,
"parts": []
},
{
"name": "Mike B",
"value": 0,
"parts": []
},
{
"name": "Nancy S",
"value": 1,
"parts": [
"2nd"
]
},
{
"name": "Paul N",
"value": 2,
"parts": []
},
{
"name": "Scott J",
"value": 1,
"parts": [
"AG"
]
},
{
"name": "Scott J",
"value": 1,
"parts": [
"AG"
]
},
{
"name": "Trisha S",
"value": 0,
"parts": []
}
]
},
{
"day": "2019-01-27T00:00:00",
"entries": [
{
"name": "Adam D",
"value": 1,
"parts": [
"EG"
]
},
{
"name": "Chris S",
"value": 2,
"parts": []
},
{
"name": "Debbie J",
"value": 2,
"parts": []
},
{
"name": "Dennis S",
"value": 1,
"parts": [
"Lead"
]
},
{
"name": "Jamie W",
"value": 1,
"parts": [
"Melody"
]
},
{
"name": "Jen C",
"value": 1,
"parts": [
"Melody"
]
},
{
"name": "Joe T",
"value": 1,
"parts": [
"Drums"
]
},
{
"name": "Karen B",
"value": 0,
"parts": []
},
{
"name": "Kristene B",
"value": 1,
"parts": [
"Melody"
]
},
{
"name": "Lisa R",
"value": 0,
"parts": []
},
{
"name": "Mike B",
"value": 1,
"parts": [
"AG"
]
},
{
"name": "Nancy S",
"value": 2,
"parts": []
},
{
"name": "Paul N",
"value": 2,
"parts": []
},
{
"name": "Scott J",
"value": 2,
"parts": []
},
{
"name": "Trisha S",
"value": 1,
"parts": [
"2nd"
]
}
]
}
]
}
}
</script>
<body>
<div ng-app="myApp" ng-controller="MyCtrl">
<table class="table" border=1>
<thead>
<tr>
<th>Name</th>
<th ng-repeat=" x in schedule.days" scope="col">{{x.day}}</th>
</tr>
</thead>
<style>
.red{background-color: red;}
.white{background-color: white;}
.green{background-color: green;}
</style>
<tbody>
<tr ng-class="{'red': day.entries[$parent.$index].value === 1, 'green': day.entries[$parent.$index].value === 2, 'white': day.entries[$parent.$index].value === 0}" ng-repeat="day1 in schedule.days[0].entries" scope="row">
<td>{{day1.name}}</td>
<td ng-repeat="day in schedule.days">{{day.entries[$parent.$index].parts[0]}}>{{day.entries[$parent.$index].value}}</td>
</tr>
</tbody>
</table>
</div>
<!-- <div ng-app="myApp" ng-controller="MyCtrl">
<table class="table" border=1>
<thead>
<tr>
<th>Name</th>
<th ng-repeat=" x in schedule.days" scope="col">{{x.day}}</th>
</tr>
</thead>
<tbody>
<tr ng-repeat=" item in schedule.days" scope="row">
<td ng-repeat="y in item.entries">{{y.value}}</td>
<td ng-repeat=" itm in item.parts">{{itm}}</td>
</tr>
</tbody>
</table>
</div>-->
</body>
</html>
I have create a custom filter for applying class to td
myApp.filter('color',function(){
return function(status){
console.log(status);
switch(status){
case 0:
return 'white';
break;
case 1:
return 'red';
break;
case 2:
return 'green';
break;
}
}
});
Add the filter in td tag
<td class="{{day.entries[$parent.$index].value | color}}" ng-repeat="day in schedule.days">{{day.entries[$parent.$index].parts[0]}}>{{day.entries[$parent.$index].value}}</td>
I was apply the style to the tr tag rather than td.
'https://jsfiddle.net/omelsoft/xL35psco/5/'
This solved my problem
I am trying to convert a tidy table (eg. example below) into a nested list using R/tidyverse. Using some tidyverse magic I was able to convert it to a list nested of depth three, but I cannot figure out how to nest it deeper.
Take the following example input:
library(tidyverse)
library(stringi)
n_patient = 2
n_samples = 3
n_readgroup = 4
n_mate = 2
df = data.frame(patient = rep(rep(LETTERS[1:n_patient], n_samples),2),
sample = rep(rep(seq(1:n_samples), each = n_patient),2),
readgroup = rep(stri_rand_strings(n_patient * n_samples * n_readgroup, 6, '[A-Z]'),2),
mate = rep(1:n_mate, each = n_patient * n_samples * n_readgroup)) %>%
mutate(file = sprintf("%s.%s.%s_%s", patient, sample, readgroup, mate)) %>%
arrange(file)
json = df %>%
nest(-patient, .key = samples) %>%
mutate(samples = map(samples, nest, -sample, .key=readgroups))
jsonlite::toJSON(json, pretty = T)
Which looks for example like this
> head(df)
patient sample readgroup mate file
1 A 1 FCSDRJ 1 A.1.FCSDRJ_1
2 A 1 FCSDRJ 2 A.1.FCSDRJ_2
3 A 1 IAXDPR 1 A.1.IAXDPR_1
4 A 1 IAXDPR 2 A.1.IAXDPR_2
5 A 1 MLDBKZ 1 A.1.MLDBKZ_1
6 A 1 MLDBKZ 2 A.1.MLDBKZ_2
The output looks like this:
[
{
"patient": "A",
"samples": [
{
"sample": 1,
"readgroups": [
{
"readgroup": "FCSDRJ",
"mate": 1,
"file": "A.1.FCSDRJ_1"
},
{
"readgroup": "FCSDRJ",
"mate": 2,
"file": "A.1.FCSDRJ_2"
},
{
"readgroup": "IAXDPR",
"mate": 1,
"file": "A.1.IAXDPR_1"
},
{
"readgroup": "IAXDPR",
"mate": 2,
"file": "A.1.IAXDPR_2"
},
{
"readgroup": "MLDBKZ",
"mate": 1,
"file": "A.1.MLDBKZ_1"
},
{
"readgroup": "MLDBKZ",
"mate": 2,
"file": "A.1.MLDBKZ_2"
},
{
"readgroup": "OMTWHK",
"mate": 1,
"file": "A.1.OMTWHK_1"
},
{
"readgroup": "OMTWHK",
"mate": 2,
"file": "A.1.OMTWHK_2"
}
]
},
{
"sample": 2,
"readgroups": [
{
"readgroup": "BHAEFA",
"mate": 1,
"file": "A.2.BHAEFA_1"
},
{
"readgroup": "BHAEFA",
"mate": 2,
"file": "A.2.BHAEFA_2"
},
{
"readgroup": "DIBRHT",
"mate": 1,
"file": "A.2.DIBRHT_1"
},
{
"readgroup": "DIBRHT",
"mate": 2,
"file": "A.2.DIBRHT_2"
},
{
"readgroup": "HHMOSV",
"mate": 1,
"file": "A.2.HHMOSV_1"
},
{
"readgroup": "HHMOSV",
"mate": 2,
"file": "A.2.HHMOSV_2"
},
{
"readgroup": "KJXTPN",
"mate": 1,
"file": "A.2.KJXTPN_1"
},
{
"readgroup": "KJXTPN",
"mate": 2,
"file": "A.2.KJXTPN_2"
}
]
},
{
"sample": 3,
"readgroups": [
{
"readgroup": "CHXJMM",
"mate": 1,
"file": "A.3.CHXJMM_1"
},
{
"readgroup": "CHXJMM",
"mate": 2,
"file": "A.3.CHXJMM_2"
},
{
"readgroup": "MDWRBS",
"mate": 1,
"file": "A.3.MDWRBS_1"
},
{
"readgroup": "MDWRBS",
"mate": 2,
"file": "A.3.MDWRBS_2"
},
{
"readgroup": "RHHKGK",
"mate": 1,
"file": "A.3.RHHKGK_1"
},
{
"readgroup": "RHHKGK",
"mate": 2,
"file": "A.3.RHHKGK_2"
},
{
"readgroup": "VVVJFD",
"mate": 1,
"file": "A.3.VVVJFD_1"
},
{
"readgroup": "VVVJFD",
"mate": 2,
"file": "A.3.VVVJFD_2"
}
]
}
]
},
{
"patient": "B",
"samples": [
{
"sample": 1,
"readgroups": [
{
"readgroup": "QAFCOS",
"mate": 1,
"file": "B.1.QAFCOS_1"
},
{
"readgroup": "QAFCOS",
"mate": 2,
"file": "B.1.QAFCOS_2"
},
{
"readgroup": "TJYYMQ",
"mate": 1,
"file": "B.1.TJYYMQ_1"
},
{
"readgroup": "TJYYMQ",
"mate": 2,
"file": "B.1.TJYYMQ_2"
},
{
"readgroup": "YMHWOI",
"mate": 1,
"file": "B.1.YMHWOI_1"
},
{
"readgroup": "YMHWOI",
"mate": 2,
"file": "B.1.YMHWOI_2"
},
{
"readgroup": "ZOMSBU",
"mate": 1,
"file": "B.1.ZOMSBU_1"
},
{
"readgroup": "ZOMSBU",
"mate": 2,
"file": "B.1.ZOMSBU_2"
}
]
},
{
"sample": 2,
"readgroups": [
{
"readgroup": "CZWHXP",
"mate": 1,
"file": "B.2.CZWHXP_1"
},
{
"readgroup": "CZWHXP",
"mate": 2,
"file": "B.2.CZWHXP_2"
},
{
"readgroup": "MIMMNH",
"mate": 1,
"file": "B.2.MIMMNH_1"
},
{
"readgroup": "MIMMNH",
"mate": 2,
"file": "B.2.MIMMNH_2"
},
{
"readgroup": "RCWMQY",
"mate": 1,
"file": "B.2.RCWMQY_1"
},
{
"readgroup": "RCWMQY",
"mate": 2,
"file": "B.2.RCWMQY_2"
},
{
"readgroup": "WDMLHE",
"mate": 1,
"file": "B.2.WDMLHE_1"
},
{
"readgroup": "WDMLHE",
"mate": 2,
"file": "B.2.WDMLHE_2"
}
]
},
{
"sample": 3,
"readgroups": [
{
"readgroup": "DWITMU",
"mate": 1,
"file": "B.3.DWITMU_1"
},
{
"readgroup": "DWITMU",
"mate": 2,
"file": "B.3.DWITMU_2"
},
{
"readgroup": "GCLWMA",
"mate": 1,
"file": "B.3.GCLWMA_1"
},
{
"readgroup": "GCLWMA",
"mate": 2,
"file": "B.3.GCLWMA_2"
},
{
"readgroup": "QZZKQB",
"mate": 1,
"file": "B.3.QZZKQB_1"
},
{
"readgroup": "QZZKQB",
"mate": 2,
"file": "B.3.QZZKQB_2"
},
{
"readgroup": "WJKGRB",
"mate": 1,
"file": "B.3.WJKGRB_1"
},
{
"readgroup": "WJKGRB",
"mate": 2,
"file": "B.3.WJKGRB_2"
}
]
}
]
}
]
Which is great, except that I also want to nest by "mate" (and in theory nest by any number of variables, without any depth limitation). Any suggestions how to accomplish this?
Thanks!
1st step is to notice you're doing it backward, this gives the same output as yours but is simpler:
json2 <- df %>% nest(-(1:2),.key=readgroups) %>% nest(-1,.key=samples)
Then we can expand it:
json3 <- df %>% nest(-(1:3),.key=mate) %>% nest(-(1:2),.key=readgroups) %>% nest(-1,.key=samples)
jsonlite::toJSON(json3,pretty=T)
output:
[
{
"patient": "A",
"samples": [
{
"sample": 1,
"readgroups": [
{
"readgroup": "FUPEYR",
"mate": [
{
"mate": 1,
"file": "A.1.FUPEYR_1"
},
{
"mate": 2,
"file": "A.1.FUPEYR_2"
}
...
And if necessary, generalize it:
vars <- names(df)[-1] # or whatever variables you want to nest, order matters!
var_pairs <- map((length(vars)-1):1,~vars[.x:(.x+1)])
json4 <- reduce(var_pairs,~{nm<-.y[1];nest(.x,.y,.key=!!enquo(nm))},.init=df)
jsonlite::toJSON(json4,pretty=T)
output:
[
{
"patient": "A",
"sample": [
{
"sample": 1,
"readgroup": [
{
"readgroup": "FUPEYR",
"mate": [
{
"mate": 1,
"file": "A.1.FUPEYR_1"
},
{
"mate": 2,
"file": "A.1.FUPEYR_2"
}
...