Как построить линейный график с несколькими значениями y для одного значения x в графике?

Я хочу построить график с помощью jupyter noterbook + plotly на основе данных, которые я сгруппировал по дням и идентификаторам.

DataFrame выглядит так:

DataFrame

Я пробовал это в matplotlib, но тоже не мог понять.

Мне нужен график, в котором x = столбец часа, а y показывает количество. Например:

Hour 0: x[0] = [2622, 48, 374, 210, 305, 1427, 83, 12]

Hour 1: x[1] = [2920, 25, 357, 140, 283, 79, 14, 53]

... 

with x = [0, 1, 2, ..., 23]

Это означает, что каждый x имеет много значений y. Как я могу построить это сюжетно? Должен ли я делать уменьшение размера? Если да, то как?

Заранее спасибо за помощь!

Анализ настроения постов в Twitter с помощью Python, Tweepy и Flair
Анализ настроения постов в Twitter с помощью Python, Tweepy и Flair
Анализ настроения текстовых сообщений может быть настолько сложным или простым, насколько вы его сделаете. Как и в любом ML-проекте, вы можете выбрать...
7 лайфхаков для начинающих Python-программистов
7 лайфхаков для начинающих Python-программистов
В этой статье мы расскажем о хитростях и советах по Python, которые должны быть известны разработчику Python.
Установка Apache Cassandra на Mac OS
Установка Apache Cassandra на Mac OS
Это краткое руководство по установке Apache Cassandra.
Сертификатная программа "Кванты Python": Бэктестер ансамблевых методов на основе ООП
Сертификатная программа "Кванты Python": Бэктестер ансамблевых методов на основе ООП
В одном из недавних постов я рассказал о том, как я использую навыки количественных исследований, которые я совершенствую в рамках программы TPQ...
Создание персонального файлового хранилища
Создание персонального файлового хранилища
Вы когда-нибудь хотели поделиться с кем-то файлом, но он содержал конфиденциальную информацию? Многие думают, что электронная почта безопасна, но это...
Создание приборной панели для анализа данных на GCP - часть I
Создание приборной панели для анализа данных на GCP - часть I
Недавно я столкнулся с интересной бизнес-задачей - визуализацией сбоев в цепочке поставок лекарств, которую могут просматривать врачи и...
1
0
1 774
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

  • Для данного счета зафиксируйте абсциссу
  • count — это 1D array длины 8
  • Итак, создайте 8 одинаковых абсцисс и отметьте их точки данных.
  • Здесь речь идет о том, что нет необходимости использовать сюжет

Ниже я просто использую два значения x, которые вы дали, вы можете использовать цикл for для оставшихся

import numpy as np
import matplotlib.pyplot as plt

y1 = [2622, 48, 374, 210, 305, 1427, 83, 12]
x1 = 0*np.ones(8)

y2 = [2920, 25, 357, 140, 283, 79, 14, 53]
x2 = 1*np.ones(8)

plt.scatter(x1, y1)
plt.scatter(x2, y2)
plt.show()

Соответствующий код цикла ниже

import numpy as np
import matplotlib.pyplot as plt


count = [[2622, 48, 374, 210, 305, 1427, 83, 12], [2920, 25, 357, 140, 283, 79, 14, 53]]
hour = np.ones((8, ) ,dtype = int)

for i in range(2):
  plt.scatter(i*hour, count[i])

plt.show()

Graph

enter image description here

Для всего dataframe просто замените

  • range(2) от range(24)
Ответ принят как подходящий

Это предложение не будет соответствовать вашей структуре данных на 100%. Но мы займемся этим позже, если окажется, что это то, что вы ищете.


Вы можете добиться того, чего хотите, построив сюжетную фигуру с несколькими трассами. Если вы хотите, чтобы ваши точки данных были немного дрожащими, чтобы избежать перекрытия, вы можете использовать go.Box(), чтобы получить это:

Участок:

enter image description here

Полный код:

Это настроено для работы в автономном блокноте Jupyter. Сюжетные фигуры создаются прямо в блокноте.

# imports
import plotly
from plotly import tools
from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot
import pandas as pd
import numpy as np
import plotly.plotly as py
import plotly.graph_objs as go

# setup
init_notebook_mode(connected=True)
np.random.seed(123)

# dataframe
df = pd.DataFrame({'x0':[2622, 48, 374, 210, 305, 1427, 83, 12],
                    'x1':[2920, 25, 357, 140, 283, 79, 14, 53]})

# build traces for each x
traces = {}
for col in df.columns:
    traces['trace_' + col] = go.Box(name = col, y=df[col],
                                    boxpoints = 'all',
                                    pointpos = 0,
                                    marker = dict(color = 'rgb(84, 173, 39)'),
                                    line = dict(color = 'rgba(0,0,0,0)'),
                                    fillcolor = 'rgba(0,0,0,0)')
# convert data to form required by plotly
data = list(traces.values())

# build figure
fig = go.Figure(data, layout)

# plot figure
iplot(fig)

Другие вопросы по теме