8

I have the following dataframe and want to use altair library in Python to plot my bar chart. However, I couldn't figure out how to expand the width of each bar (same as width=0.5 parameter in matplotlib).

import pandas as pd 
from altair import * 

ls = [[   1,  734], [   2, 1705], [   3, 2309],
      [   4, 2404], [   5, 2022], [   6, 1538],
      [   7, 1095], [   8,  770], [   9,  485],
      [  10,  312], [  11,  237], [  12,  153],
      [  13,  103], [  14,   69], [  15,   47],
      [  16,   39], [  17,   43], [  18,   28],
      [  19,   18]]
df = pd.DataFrame(ls, columns=['n_authors', 'n_posters'])

Here is plotting function using altair

bar_chart = Chart(df).mark_bar().encode(
    x=X('n_authors', title='Number of Authors in a Poster'), 
    y=Y('n_posters', title='Number of Posters'),
).configure_facet_cell(
    strokeWidth=1.0,
    height=200,
    width=300
 )
bar_chart.display()

The plot looks like below from the script:

Imgur

titipata
  • 5,321
  • 3
  • 35
  • 59

2 Answers2

10

The answer of @Nipun doesn't work any more. After some experimenting, I could obtain the desired result with size instead of barSize. (I only tested it in Jupyter Lab.)

from pandas import *
from altair import *

ls = [[   1,  734], [   2, 1705], [   3, 2309],
      [   4, 2404], [   5, 2022], [   6, 1538],
      [   7, 1095], [   8,  770], [   9,  485],]
df = DataFrame(ls, columns=['X', 'Y'])

Chart(df).mark_bar(size=20).encode(x='X', y='Y')
Primo Petri
  • 424
  • 5
  • 18
  • 1
    Did you found a way to increase the spacing as well ? When the size is increased like that, it starts to overlap the neighbor bars. – Tarantula Jun 05 '18 at 21:26
  • 1
    @Tarantula you should just increase the width of the plot then; e.g. `Chart(df).mark_bar(size=20).encode(x='X', y='Y').properties(width=800)` – getup8 Apr 11 '19 at 21:00
  • Is there a way to get this to scale with zoom when using interactive? – zylatis Apr 22 '20 at 08:03
2

You need to use the barSize argument. See more here for Mark Configuration.

Solution

bar_chart = Chart(df).mark_bar(barSize=20).encode(
    x=X('n_authors', title='Number of Authors in a Poster'), 
    y=Y('n_posters', title='Number of Posters'),
).configure_facet_cell(
    strokeWidth=1.0,
    height=200,
    width=300
 )
bar_chart.display()

Output

enter image description here

Nipun Batra
  • 11,007
  • 11
  • 52
  • 77