altair icon indicating copy to clipboard operation
altair copied to clipboard

`.title()` does not support all the argument in `axis(title=...)` but still lists them in the docstring

Open franzhaas opened this issue 1 year ago • 4 comments

Dear all,

I tried the example from https://altair-viz.github.io/gallery/layered_chart_with_dual_axis.html, both the Method syntax as well as the Attribute syntax.

On my setup (jupyterlab 4 + altair 5.0.1) only the attribute syntax colours the axis labels with the colours from the graph. The Method syntax colors the axis labels black.

I am happily using the Attribute syntax now. Is this a bug? Of the documentation? Of the library itself?

Thanks in advance, Franz


Please follow these steps to make it more efficient to solve your issue:

  • [ x] Since Altair is a Python wrapper around the Vega-Lite visualization grammar, most bugs should be reported directly to Vega-Lite. You can click the Action Button of your Altair chart and "Open in Vega Editor" to create a reproducible Vega-Lite example and see if you get the same error in the Vega Editor.
  • [ x] Search for duplicate issues.
  • [x ] Use the latest version of Altair.
  • [ x] Describe how to reproduce the bug and include the full code and data to reproduce it, ideally using a sample data set from vega_datasets.

franzhaas avatar Jul 23 '23 18:07 franzhaas

Thanks for reporting, the reason is that Vega-Lite's title parameter only takes a string, so the title() method (or title= parameter in version <=4) can only take a string of the title text and no parameters for customizing the title (so other parameters such as subtitle= also does not work inside title(). This is currently not clear from the docstring which mentions that it it possible to pass parameters to title, so we should either change the docstring or silently pass those parameters forward to axis(title={}).

Shorter examples:

import altair as alt
from vega_datasets import data

source = data.seattle_weather()


alt.Chart(source).mark_point().encode(
    alt.X('date').title('This should be red', color='red')
)

image

alt.Chart(source).mark_point().encode(
    alt.X('date').axis(title='This should be red', titleColor='red')
)

image

joelostblom avatar Jul 25 '23 16:07 joelostblom

Ok, thanks this makes sense now...

franzhaas avatar Jul 26 '23 08:07 franzhaas

I just checked, it is still an issue with 5.2.0.

franzhaas avatar Mar 06 '24 13:03 franzhaas

Yes, this issue will be closed once a PR has been submitted to fix it. Feel free to create one if you have the time to get familiar with the code base.

joelostblom avatar Mar 06 '24 14:03 joelostblom