如何以绘图方式绘制一个x值的具有多个y值的折线图?

时间:2019-05-22 14:06:56

标签: python jupyter-notebook plotly

我想根据我按天和ID分组的数据,使用jupyter noterbook +绘制图表。

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值。我该如何在情节上作图? 我是否必须缩小尺寸?如果是,怎么办?

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

  • 对于给定的计数,修正横坐标
  • count是长度为1D array的{​​{1}}
  • 因此创建8个相同的横坐标并标记其数据点
  • 这里差不多是点,不需要使用绘图

下面,我只使用您给定的两个x值,您可以为其余的

使用for循环
8

相应的循环代码如下

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()
  

图表

     

enter image description here

对于整个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() ,只需替换

  • dataframerange(2)

答案 1 :(得分:0)

此建议与您的数据结构100%不匹配。但是,如果事实确实如此,我们将在稍后处理。


您可以通过构建具有多条迹线的图形来实现所需的目标。如果您希望数据点有点抖动以避免重叠,则可以使用go.Box()来做到这一点:

情节:

enter image description here

完整代码:

此设置可以在离线Jupyter Notebook中使用。绘图直接在笔记本中创建。

# 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)