Добавить сплошную заливку фона на график Альтаира - PullRequest
1 голос
/ 28 марта 2019

Мне очень нравится Altair для создания графиков на Python. Как дань уважения, я хотел восстановить граф (ы) Economist в «Ошибки, мы нарисовали несколько» : enter image description here Это код первого выстрела:

import numpy as np
import pandas as pd
import altair as alt

 df = pd.read_csv('http://infographics.economist.com/databank/Economist_corbyn.csv').dropna()

 bars = alt.Chart(df, title="Average number of likes per Facebook post").mark_bar().
    encode(
        y=alt.Y('Page:O', axis=alt.Axis(title=''),
        sort=alt.EncodingSortField(
           field="Average number of likes per Facebook post 2016:Q",  # The field to use for the sort
           op="sum",  # The operation to run on the field prior to sorting
           order="ascending"  # The order to sort in
       )),
       color=alt.value("#116EA1"),
       x=alt.X("Average number of likes per Facebook post 2016:Q", 
       axis=alt.Axis(title='Average number of likes per Facebook post')),
)


text = bars.mark_text(
    align='left',
    baseline='middle',
    dx=3,  # Nudges text to right so it doesn't appear on top of the bar,
).encode(
    text='Average number of likes per Facebook post 2016:Q'
)

(bars+text).configure_title(fontSize=14)

enter image description here

Четыре вопроса:

  1. Как мне залить фон сплошным цветом ## D9E9F0?
  2. Как сделать, чтобы первая строка всплывала (добавив рамку над жирным шрифтом 'Джереми Корбин')?

  3. Могу ли я добавить светло-серое уведомление об авторских правах в левом нижнем углу угол с новыми возможностями текстового слоя Altair в версии 3? Если да, то как это сделать?

  4. Как я могу поставить метки сверху графика?

Спасибо за помощь!

ОБНОВЛЕНИЕ с ответами на (1) и (4) из jakevdp и aberna :

df['x'] = df['Average number of likes per Facebook post 2016']/1000.0
bars = alt.Chart(
    df, title="Average number of likes per Facebook post ('000)"
).mark_bar().encode(
    y=alt.Y('Page:O', axis=alt.Axis(title=''),
           sort=alt.EncodingSortField(
            field="Average number of likes per Facebook post 2016:Q",  # The field to use for the sort
            op="sum",  # The operation to run on the field prior to sorting
            order="ascending"  # The order to sort in
        )),
    color=alt.value("#116EA1"),
    x=alt.X("x:Q", 
            axis=alt.Axis(title='', orient="top"),
            scale=alt.Scale(round=True, domain=[0,5])),
)

bars.configure_title(fontSize=14).configure(background='#D9E9F0')

enter image description here

Ответы [ 2 ]

2 голосов
/ 28 марта 2019

Отвечая на один из ваших вопросов: вы можете добавить фон, используя configure(background="colorname").Например:

(bars+text).configure_title(fontSize=14).configure(background='#DDEEFF')

enter image description here

1 голос
/ 29 марта 2019

Отвечая на ваш вопрос № 4, вам нужно использовать параметр orient="top" в альтернативной оси.

axis=alt.Axis(title='Average number of likes per Facebook post',orient="top"))

enter image description here

...