Altair Y-Axis Label Возможна правка и выравнивание по левому краю? - PullRequest
0 голосов
/ 24 октября 2019

Я пытаюсь воссоздать этот график в Альтаире, но не могу понять, как сделать несколько незначительных правок: https://datawrapper.dwcdn.net/E0jaK/1/

Вот мой текущий прогресс: https://imgur.com/RMuTU7h

Три правки, которые я пытаюсь выяснить:

  • Как выровнять метки по оси Y влево

  • Как сделатьдобавить расстояние между метками и осью Y

  • Как переместить метки с номерами стержней к основанию стержней вместо концов

Любое понимание того, как реализовать эти изменения, было бы замечательно.

Вот необработанные данные:

Crime,Count
Larceny/Theft,739
Assault,177
Burglary/Breaking & Entering,133
Destruction of Property/Vandalism,128
Drugs,107
Motor Vehicle Theft,95
Fraud,71
Sex Offenses,57
Suspicious Activity,45
Trespassing,23
Family Offenses,22
Weapons Violations,21

Это тема, которую я использовал:

def chart_theme():
    font = "Calibri"
    return {
        "width": 700,
        "height": 300,
        "background": "white",
        "config": {
            "title": {
                "fontSize": 20,
                "anchor": "start" 
            },
            "axisY": {
                "labelFont": font,
                "labelFontSize": 13,
                "labelLimit":200,
                "ticks": False, 
                "titleFont": font,
                "titleFontSize": 12,
                "titleAlign":"right",
                "titleAngle": 0, 
                "titleY": -10, 
                "titleX": 25, 
            },
            "view":{"stroke": "transparent",
            },
}
    }

И воткод диаграммы:

base = alt.Chart(df, title='San Francisco Crime (11/05 - 11/11)').encode(
    x=alt.X('Count', axis=None),
    y=alt.Y('Crime', title='Crimes reported to SFPD, by top complaint', 
    sort=list(df.Crime.values)))

bars = base.mark_bar(size=22).encode(color=alt.condition(
    alt.datum.Count > 700,
    alt.value('#e17700'),
    alt.value('#00648e')))

text = base.mark_text(
    color='white',
    align='right',
    size=12,
    dx=-3
).encode(
    text='Count')

chart = bars + text
chart

Будем весьма благодарны за любые рекомендации / предложения.

1 Ответ

1 голос
/ 25 октября 2019

Как насчет чего-то подобного

import pandas as pd
import altair as alt

data = {'Larceny/Theft':739,
'Assault':177,
'Burglary/Breaking & Entering':133,
'Destruction of Property/Vandalism':128,
'Drugs':107,
'Motor Vehicle Theft':95,
'Fraud':71,
'Sex Offenses':57,
'Suspicious Activity':45,
'Trespassing':23,
'Family Offenses':22,
'Weapons Violations':21}

df = pd.DataFrame(list(data.items()), columns=['Crime', 'Count'])

base = alt.Chart(df, title='San Francisco Crime (11/05 - 11/11)').encode(
    x=alt.X('Count', axis=None),
    y=alt.Y('Crime', title='Crimes reported to SFPD, by top complaint', 
    sort=list(df.Crime.values)))

bars = base.mark_bar(size=22).encode(color=alt.condition(
    alt.datum.Count > 700,
    alt.value('#e17700'),
    alt.value('#00648e')))

text = alt.Chart(df).mark_text(
    color='white',
    align='left',
    x=3
).encode(alt.Text('Count:N'), alt.Y('Crime',   sort=list(df.Crime.values)))

chart = bars + text
chart.properties(width=700).configure_axisY(
    titleAngle=0, 
    titleY=-10,
    titleX=-60,
    labelPadding=160, 
    labelAlign='left'
)

enter image description here

...