plot.ly тире многогрупповые скрипки? - PullRequest
0 голосов
/ 09 июля 2019

Я бы хотел, используя plot.ly dash, строить сгруппированные скрипки с иерархической группировкой.Из документов .

мне не ясно, для ясности рассмотрим набор данных подсказок, который они предоставляют.

Предположим, что я изменил набор данных, чтобы скопировать подсказкина «низкие», «средние» и «высокие» самосвалы.

Тогда я бы хотел, чтобы для каждой группы самосвалов с биннедом (низкий / средний / высокий) построить сгруппированную скрипку самца против самки.

Похоже, мне нужно сделать для массива трассировок что-то в виде:


tip_groups = ['low', 'med', 'big']

for tgrp in tip_groups:
    for sex in ['male', 'female']
        dff = df[df['tip_group'] == tgrp & (df['sex'] == sex)]
        data.append({
            'x': dff['tip_group'],
            'y': dff['tip'],
            'legendgroup':dff['tip'],
            'scalegroup': dff['tip_group']
        })

, но это не дает желаемых результатов, как я ожидаю увидетьтри группы по две скрипки в каждой.

код:


df = pd.read_csv("https://raw.githubusercontent.com/plotly/datasets/master/violin_data.csv")
def tip_cat(row):
    percent = row.tip / row.total_bill * 100
    if percent < 10:
        return 'low'
    if percent < 15:
        return 'med'    
    return 'big'

df['tip_category'] = df.apply(tip_cat, axis=1)

data = []

sexes = np.unique(df.sex)
categories = np.unique(df.tip_category)

colors = [
    '#e6194B',
    '#3cb44b',
    '#ffe119',
    '#4363d8',
    '#f58231',
    '#911eb4',
    '#42d4f4',
]

for i, sex in enumerate(sexes):
    for j, cat in enumerate(categories):
        dff = df[
            (df['sex'] == sex)
            & (df['tip_category'] == cat)
        ]

        data.append({
            'type': 'violin',
            'x': dff['sex'],
            'y': dff['tip'],
            'legendgroup':  '{}: {}'.format(sex, cat),
            'scalegroup':  '{}: {}'.format(sex, cat),
            'name': '{}: {}'.format(sex, cat),
            'fillcolor': colors[i],
             "line": {
                "color": 'black'
             },
        })

fig = {
    'data': data, 
    'layout': {

    }
}




# import plotly_express as px # this works, but not with go.Violin
px.violin(df, y="tip", x="sex", color="tip_category", box=True, points="all", hover_data=df.columns)

1 Ответ

1 голос
/ 10 июля 2019

Если я правильно понял, вам следует изменить несколько строк в вашем коде, а именно:

от:

'x': dff['sex'],

до:

'x': dff['tip_category'],

и

от:

'layout': {

    }

до:

"layout" : {
        "yaxis": {
            "zeroline": False,
        },
        "violinmode": "group"
    }

Суммировать:

df = pd.read_csv("https://raw.githubusercontent.com/plotly/datasets/master/violin_data.csv")
def tip_cat(row):
    percent = row.tip / row.total_bill * 100
    if percent < 10:
        return 'low'
    if percent < 15:
        return 'med'    
    return 'big'

df['tip_category'] = df.apply(tip_cat, axis=1)

data = []

sexes = np.unique(df.sex)
categories = np.unique(df.tip_category)

colors = [
    '#e6194B',
    '#3cb44b',
    '#ffe119',
    '#4363d8',
    '#f58231',
    '#911eb4',
    '#42d4f4',
]

for i, sex in enumerate(sexes):
    for j, cat in enumerate(categories):
        dff = df[
            (df['sex'] == sex)
            & (df['tip_category'] == cat)
        ]

        data.append({
            'type': 'violin',
            'x': dff['tip_category'],
            'y': dff['tip'],
            'legendgroup':  '{}: {}'.format(sex, cat),
            'scalegroup':  '{}: {}'.format(sex, cat),
            'name': '{}: {}'.format(sex, cat),
            'fillcolor': colors[i],
             "line": {
                "color": 'black'
             },
        })

fig = {
    'data': data, 
"layout" : {
        "yaxis": {
            "zeroline": False,
        },
        "violinmode": "group"
    }
}

iplot(fig, filename = 'violin/grouped', validate = False)

и вы получите:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...