#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")
дает