Plotly: как использовать точечную диаграмму для отображения многоиндексного фрейма данных?

#python #pandas #plotly #jupyter #plotly-python

#python #панды #plotly #jupyter #plotly-python

Вопрос:

Я использую многоиндексный фрейм данных для построения линейной диаграммы. Я вижу правильный результат при построении графика с использованием Matplotlib, но фрейм данных показывает неверный результат при построении с использованием точечных диаграмм Plotly — почему?

 import pandas as pd
data = pd.DataFrame([
        ('Q1','Blue',100),
        ('Q1','Green',300),
        ('Q2','Blue',200),
        ('Q2','Green',350),
        ('Q3','Blue',300),
        ('Q3','Green',400),
        ('Q4','Blue',400),
        ('Q4','Green',450),
    ], 
    columns=['quarter', 'company', 'value']
)
data = data.set_index(['quarter', 'company']).value

data.unstack().plot(kind='bar', stacked=True)
 

Приведенный выше код отображает правильную диаграмму. Приведенный ниже код также генерирует правильный результат.

 fig = go.Figure()
fig.add_trace(go.Scatter(x=sample.index, y=sample['Blue'], 
                         #mode='lines markers', name='',
                         #line=dict(color=colors_list[1],width=2,) ,
                          
                        )
)
 

но я не знаю, как одновременно отображать синий и зеленый цвета на точечной диаграмме?

пример:

 fig = go.Figure()
fig.add_trace(go.Scatter(x=sample.index, y=sample, 
                         #mode='lines markers', name='',
                         #line=dict(color=colors_list[1],width=2,) ,
                          
                        )
)
 

Кто-нибудь может помочь, как построить синий и зеленый вместе?

Комментарии:

1. В приведенном выше коде я забыл добавить следующее. образец = data.unstack(-1).head(5) образец

2. Как вам мое предложение?

Ответ №1:

Ваш вопрос немного неясен, но я предполагаю, что ваша основная цель здесь — отобразить значения в массиве кварталов, где значения разделены на две группы [‘blue’, ‘red’]. (Я не совсем понимаю, почему вы запрашиваете диаграмму разброса по графику, но показываете гистограмму matplotlib …). В любом случае, если я прав, то ваш вариант использования очень хорошо подходит для plotly.express, в частности px.scatter, с помощью которого следующий фрагмент приведет к приведенному ниже рисунку.

 import pandas as pd
import plotly.graph_objects as go
import plotly.express as px

data = pd.DataFrame([
        ('Q1','Blue',100),
        ('Q1','Green',300),
        ('Q2','Blue',200),
        ('Q2','Green',350),
        ('Q3','Blue',300),
        ('Q3','Green',400),
        ('Q4','Blue',400),
        ('Q4','Green',450),
    ], 
    columns=['quarter', 'company', 'value']
)

fig = px.scatter(data, x = 'quarter', y = 'value',
                 color = 'company',
                 color_discrete_sequence=['Blue', 'Green'])
fig.show()
 

введите описание изображения здесь

Ответ №2:

Как указал Вестланд в своем хорошем ответе, вы можете использовать Plotly Express, чтобы сделать это просто.

Однако, если вы не хотите использовать Plotly Express, вам необходимо добавить графики (трассировки) к рисунку и настроить клавиши рисунка, как показано ниже.

 import plotly.graph_objects as go

fig = go.Figure()
fig.add_trace(go.Scatter(x=sample.index, y=sample['Green'], mode='markers', name = 'Green', marker_color = 'Green'))
fig.add_trace(go.Scatter(x=sample.index, y=sample['Blue'], mode='markers', name = 'Blue', marker_color = 'Blue'))
fig.update_layout(title="The Title", xaxis_title="Quarter", yaxis_title="Value", legend_title="Company")
 

дает

введите описание изображения здесь