# Sorting

```
{
"data": ... ,
"mark": ... ,
"encoding": {
"x": {
"field": ...,
"type": ...,
"sort": ..., // sort
...
},
"y": ...,
...
},
...
}
```

`sort`

property of a mark properties channel determines the order of the scale domain. Supported `sort`

value depends on the field’s scale type.

## Continuous Scale

If the channel has a continuous scale (quantitative or time), `sort`

can have the following values:

`"ascending"`

– the field is sort by the field’s value in ascending order.`"descending"`

– the field is sort by the field’s value in descending order.

**Default value:** `"ascending"`

.

#### Example: Reversed X-Scale

Setting x’s `sort`

to `"descending"`

reverses the x-axis. Thus, the following visualization’s x-axis starts on the maximum value of the field “Horsepower” and ends on zero.

## Ordinal Scale

If the channel has an ordinal scale, the field’s values of the channel can be sorted in the following ways:

1) Sorting by the values’s natural order in Javascript. For example, `"a"`

< `"b"`

. In this case, `sort`

can be:

`"ascending"`

– sort by the field’s value in ascending order.`"descending"`

– sort by the field’s value in descending order.

2) Sorting by aggregated value of another “sort” field. In this case, `sort`

is a **sort field definition object**, which has the following properties:

Property | Type | Description |
---|---|---|

field |
Field | The field name to aggregate over. |

op |
String | A valid aggregation operation (e.g., `mean` , `median` , etc.). |

order |
String | `"ascending"` or `"descending"` order. |

3) Unsorted – `"none`

” – The field is not sorted. This is equivalent to specifying `sort: false`

in Vega’s scales.

**Default value:** `"ascending"`

.

4) Specify custom order by providing custom `scale`

’s `domain`

. (In this case, you don’t need to use `sort`

property.)

#### Example: Sorting Ordinal Scale by Another Field

The following example sorts x by mean of Horsepower.