Мне очень нравится Altair для создания графиков на Python. Как дань уважения, я хотел восстановить граф (ы) Economist в «Ошибки, мы нарисовали несколько» :
Это код первого выстрела:
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)
Четыре вопроса:
- Как мне залить фон сплошным цветом ## D9E9F0?
Как сделать, чтобы первая строка всплывала (добавив рамку над жирным шрифтом
'Джереми Корбин')?
Могу ли я добавить светло-серое уведомление об авторских правах в левом нижнем углу
угол с новыми возможностями текстового слоя Altair в версии 3?
Если да, то как это сделать?
- Как я могу поставить метки сверху графика?
Спасибо за помощь!
ОБНОВЛЕНИЕ с ответами на (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')