Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Earn a 50% discount on the DP-600 certification exam by completing the Fabric 30 Days to Learn It challenge.

Reply
AdamMG
Frequent Visitor

Vega Lite - scatter plot

Hi Everyone.
Simple question 😉
How in Vega Lite draw line/rule (x=y) on scatterplot chart (basically line in 45 degrees)


8 REPLIES 8
AdamMG
Frequent Visitor

haha.
Thanks @lbendlin 
I have it already. The biggest problem for me is to find max and put it as field.

Hi @AdamMG,


If you just want to draw a line across the width/height of the visible view, you can do something like this, where you create a layer with a simple, empty dataset (like the fixed line example) :

{
  "$schema": "https://vega.github.io/schema/vega-lite/v5.json",
  "data": {"url": "data/cars.json"},
  "layer": [
    {
      "data": {"values": [{}]},
      "mark": "rule",
      "encoding": {
        "x": {"value": 0},
        "x2": {"value": "width"},
        "y": {"value": "height"},
        "y2": {"value": 0}
      }
    },
    {
      "mark": "point",
      "encoding": {
        "x": {"field": "Horsepower"},
        "y": {"field": "Miles_per_Gallon"}
      }
    }
  ],
  "encoding": {"x": {"type": "quantitative"}, "y": {"type": "quantitative"}}
}

dmp_0-1711340374266.png

Link to sample specification

 

You could also use the expression language to interrogate the assigned scale domains, e.g.:

{
  "$schema": "https://vega.github.io/schema/vega-lite/v5.json",
  "data": {"url": "data/cars.json"},
  "layer": [
    {
      "data": {"values": [{}]},
      "mark": "rule",
      "encoding": {
        "x": {"datum": {"expr": "domain('x')[0]"}},
        "x2": {"datum": {"expr": "domain('x')[1]"}},
        "y": {"datum": {"expr": "domain('y')[0]"}},
        "y2": {"datum": {"expr": "domain('y')[1]"}}
      }
    },
    {
      "mark": "point",
      "encoding": {
        "x": {"field": "Horsepower"},
        "y": {"field": "Miles_per_Gallon"}
      }
    }
  ],
  "encoding": {"x": {"type": "quantitative"}, "y": {"type": "quantitative"}}
}

 

Link to sample specification


If you want to do something fancier with the range of data for each encoding channel, this may be possible but would require a sample of your dataset to ensure that I could come up with an optimal approach. If you're not able to share, you might be able to consider an aggregate transform, to find the min/max of each series and plot based on those, or possibly a regression transform may be an option.

 

Hopefully, some of this may help you come up with more ideas. And thanks very much for trying Deneb!

 

Regards,

 

Daniel





Did I answer your question? Mark my post as a solution!

Proud to be a Super User!


My course: Introduction to Developing Power BI Visuals


On how to ask a technical question, if you really want an answer (courtesy of SQLBI)




AdamMG
Frequent Visitor

Hi @dm-p 
Thank you very much.
Your solution is very good but not good for my chart.
I need to pan and zoom the scatterplot and your solution does not reflect this.


You can do that in DAX, and add it as a column in the Deneb visual.

I can but I have like 150k points on the chart. Any additional data will have a huge impact on the performance

There's no meaningful way to show more than 5000 data points on a scatter plot.

You can pan and zoom...
I need to put all data on the chart.
I have also regression line so I need all data.

lbendlin
Super User
Super User

Find the max x and y values in your data, take the largest, and then add a layer that draws from 0 to that point.

Here is a simplified version:

 

lbendlin_0-1711212843488.png

 

{
  "layer": [
    {
      "data": {"name": "dataset"},
      "mark": "point",
      "encoding": {
        "y": {
          "field": "y",
          "type": "quantitative"
        },
        "x": {
          "field": "x",
          "type": "quantitative"
        }
      }
    },
    {
      "data": {
        "values": [
          {"x": 0, "y": 0},
          {"x": 4, "y": 4}
        ]
      },
      "mark": {
        "type": "line",
        "from": {"data": "data2"}
      },
      "encoding": {
        "y": {
          "field": "y",
          "type": "quantitative"
        },
        "x": {
          "field": "x",
          "type": "quantitative"
        }
      }
    }
  ]
}

Helpful resources

Announcements
PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

Check out the April 2024 Power BI update to learn about new features.