Plotly: Как представить закодированные данные на графике? - PullRequest
2 голосов
/ 07 января 2020

Хорошие люди, у меня есть эти данные, которые я делаю для того, чтобы представлять их на графике

import pandas as pd 

# intialise data of lists. 
data = {'Name':['Nick hospital', 'Nick hospital','Nick hospital', 'Krish hospital', 'Krish hospital','Krish hospital'], 
        'NAR_forms_used':[2, 1,2, 2, 2,3]
       } 

# Create DataFrame 
df = pd.DataFrame(data) 

# Print the output. 
df

Теперь при сборе моих данных есть такие формы, которые мы используем, называемые NAR-формами, которые мы разделяем для каждой больницы. Теперь инструмент сбора данных закодирован так: когда используется форма NAR, ее код 1, а когда она не используется, то она кодируется 2, и, наконец, когда форма была отправлена ​​клерку данных, пусто кодируется 3. Я хочу представить эти результаты на график, на котором столбец для NAR_forms_used имеет этот код, который 1 для да , 2 для нет и 3 для пустого, Как я могу представить эти данные на графике для каждой больницы?

Я пробовал это

fig = go.Figure(
    data=[go.Bar(
        x = df['Name'],
        y = df['NAR_forms_used']
                    )],
    layout=go.Layout(
        xaxis=dict(showgrid=False),
        yaxis=dict(showgrid=False),
    )
)

fig.show()

Но результаты не то, что я хочу, Как я могу сделать это лучше?

Ответы [ 2 ]

1 голос
/ 07 января 2020

Поскольку вы пометили вопрос с помощью заговора и еще не получили заговора, вот как я бы это сделал:

Сюжет 1:

enter image description here

Код 1:

# imports
import plotly.graph_objects as go
from plotly.offline import iplot
import pandas as pd
import numpy as np

# intialise data of lists. 
data = {'Name':['Nick hospital', 'Nick hospital','Nick hospital', 'Krish hospital', 'Krish hospital','Krish hospital'], 
        'NAR_forms_used':[2, 1,2, 2, 2,3]
       } 

# Create DataFrame 
df = pd.DataFrame(data)

# get counts per NAR type
df_nar=pd.DataFrame(df.groupby('Name')['NAR_forms_used'].value_counts())
df_nar=df_nar.rename({'NAR_forms_used': 'NAR count'}, axis='columns')
df_nar=df_nar.reset_index()

# Manage NAR types (who knows, there may be more types with time?)
nars = df_nar['NAR_forms_used'].unique()
nars = nars.tolist()
nars.sort(reverse=False)

# set up plotly figure
fig = go.Figure()

# add one trace per NAR type and show counts per hospital
for nar in nars:

    # subset dataframe by NAR type
    df_ply=df_nar[df_nar['NAR_forms_used']==nar]

    # add trace
    fig.add_trace(go.Bar(x=df_ply['Name'], y=df_ply['NAR count'], name='NAR Type='+str(nar)))

# make the figure a bit more presentable

fig.update_layout(title='NAR per hospital',
                  yaxis=dict(title='<i>count of NAR types</i>'),
                  xaxis=dict(title='<i>Hospital</i>',
                            )
                 )


fig.show()

Как вы, вероятно, знаете, не существует NAR типа 3 для больницы Nick и нет NAR типа 1 для Кри sh больницы, поэтому на первый взгляд эта цифра может показаться немного странной. Все это имеет смысл, когда вы добавляете дополнительные данные к своему образцу:

График 2:

enter image description here

Код 2:

# imports
import plotly.graph_objects as go
from plotly.offline import iplot
import pandas as pd
import numpy as np

# intialise data of lists. 
data = {'Name':['Nick hospital', 'Nick hospital', 'Nick hospital', 'Nick hospital','Nick hospital', 'Nick hospital', 'Krish hospital', 'Krish hospital','Krish hospital', 'Krish hospital'], 
        'NAR_forms_used':[3, 3, 3, 2, 1, 2, 2, 2, 3, 1]
       } 

# Create DataFrame 
df = pd.DataFrame(data)

# get counts per NAR type
df_nar=pd.DataFrame(df.groupby('Name')['NAR_forms_used'].value_counts())
df_nar=df_nar.rename({'NAR_forms_used': 'NAR count'}, axis='columns')
df_nar=df_nar.reset_index()

# Manage NAR types (who knows, there may be more types with time?)
nars = df_nar['NAR_forms_used'].unique()
nars = nars.tolist()
nars.sort(reverse=False)

# set up plotly figure
fig = go.Figure()

# add one trace per NAR type and show counts per hospital
for nar in nars:

    # subset dataframe by NAR type
    df_ply=df_nar[df_nar['NAR_forms_used']==nar]

    # add trace
    fig.add_trace(go.Bar(x=df_ply['Name'], y=df_ply['NAR count'], name='NAR Type='+str(nar)))

# make the figure a bit more presentable

fig.update_layout(title='NAR per hospital',
                  yaxis=dict(title='<i>count of NAR types</i>'),
                  xaxis=dict(title='<i>Hospital</i>',
                            )
                 )


fig.show()
0 голосов
/ 07 января 2020

Если вам нужно указать число NAR_forms_used для каждой больницы, я предлагаю вам использовать seaborn . Вот фрагмент:

import pandas as pd
import seaborn as sns
import numpy as np

# intialise data of lists and create DataFrame  
data = {'Name':np.random.choice(['Nick hospital', 'Krish hospital'], size=80), 
        'NAR_forms_used':np.random.choice([1,2,3], size=80)} 
df = pd.DataFrame(data) 

df_to_plot = (df.groupby('Name')['NAR_forms_used']
              .value_counts()
              .to_frame()
              .rename({'NAR_forms_used': 'NAR_forms_count'}, axis='columns')
              .reset_index())

sns.barplot(data=df_to_plot, x='Name', y='NAR_forms_count', hue='NAR_forms_used')

enter image description here

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