Как добавить и определить несколько линий на графике временных рядов? - PullRequest
1 голос
/ 16 января 2020

Я создаю линейный график временных рядов, используя библиотеку plotly для python. Я хотел бы подключить его к базе данных временных рядов, но сейчас я тестирую данные csv.

Возможно ли иметь оси x и y (время против значения) и загрузить несколько строк из другого значения столбца csv (хоста) и добавить к графику x и y?

import pandas as pd
import plotly.express as px

 df = pd.read_csv('stats.csv')

 fig = px.line(df, x = 'time', y = 'connections', title='connections')
 fig.show()

Я бы хотел определить более одной строки на одном графике с конкретным хостом csv значение столбца, так что каждая строка определяется чем-либо в столбце host и использует ось time vs connections. Может ли px.line метод работать для этого варианта использования, или я должен искать другой метод?

1 Ответ

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

При использовании plotly не должно иметь значения, являются ли ваши источники подключениями к базе данных или CSV-файлами. Скорее всего, вы будете обрабатывать эту часть через pandas данных. Но так как вы говорите о базах данных, я собираюсь показать вам, как вы можете легко построить диаграмму на основе набора данных с типичной структурой базы данных, где вам часто приходится полагаться на группирование и подмножество данных для отображения изменений со временем для разных подкатегорий ваших данных. Plotly express имеет несколько интересных наборов данных (dir(px.data)), например, набор данных gapminder:

    country continent   year    lifeExp pop gdpPercap   iso_alpha   iso_num
0   Afghanistan Asia    1952    28.801  8425333 779.445314  AFG 4
1   Afghanistan Asia    1957    30.332  9240934 820.853030  AFG 4
2   Afghanistan Asia    1962    31.997  10267083    853.100710  AFG 4
3   Afghanistan Asia    1967    34.020  11537966    836.197138  AFG 4
4   Afghanistan Asia    1972    36.088  13079460    739.981106  AFG 4

Если вы используете правильный подход, вы можете легко использовать px.line() для построения фигуры на такой набор данных, и пусть функция фигуры позаботится о группировке для вас. И даже используйте ту же функцию, чтобы добавить данные к этой фигуре позже. Следующие цифры ниже построены с использованием комбинации px.line(), go.Figure() и add_traces

График 1: Фигура с использованием px.line()

Этот график показывает пять стран с высоким показателем валового внутреннего продукта c на душу населения на европейском континенте. Данные сгруппированы с использованием таких аргументов, как color='country'.

enter image description here

График 2: Добавлены данные к тому же рисунку

Этот график добавляет к первому графику пять стран с самым высоким валовым продуктом c на душу населения на американском континенте. Это вызывает необходимость различения данных еще одним способом, позволяющим увидеть, являются ли данные европейскими или американскими. Это обрабатывается с использованием аргумента line_dash='country', поэтому все новые данные по сравнению с исходным графиком имеют пунктирные линии.

enter image description here

Tihs - это только один способ сделай это. Если конечный результат - то, что вы ищете, мы можем обсудить и другие подходы.

Полный код:

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

# Data
gapminder = px.data.gapminder()

# Most productive european countries (as of 2007)
df_eur = gapminder[gapminder['continent']=='Europe']
df_eur_2007 = df_eur[df_eur['year']==2007]
eur_gdp_top5=df_eur_2007.nlargest(5, 'gdpPercap')['country'].tolist()
df_eur_gdp_top5 = df_eur[df_eur['country'].isin(eur_gdp_top5)]

# Most productive countries on the american continent (as of 2007)
df_ame = gapminder[gapminder['continent']=='Americas']
df_ame_2007 = df_ame[df_ame['year']==2007]
df_ame_top5=df_ame_2007.nlargest(5, 'gdpPercap')['country'].tolist()
df_ame_gdp_top5 = df_ame[df_ame['country'].isin(df_ame_top5)]

# Plotly figure 1
fig = px.line(df_eur_gdp_top5, x='year', y='gdpPercap',
              color="country",
              line_group="country", hover_name="country")
fig.update_layout(title='Productivity, Europe' , showlegend=False)


# Plotly figure 2
fig2 = go.Figure(fig.add_traces(
                 data=px.line(df_ame_gdp_top5, x='year', y='gdpPercap',
                              color="country",
                              line_group="country", line_dash='country', hover_name="country")._data))
fig2.update_layout(title='Productivity, Europe and America', showlegend=False)

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