我想根据我按天和ID分组的数据,使用jupyter noterbook +绘制图表。
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值。我该如何在情节上作图? 我是否必须缩小尺寸?如果是,怎么办?
提前感谢您的帮助!
答案 0 :(得分:1)
count
是长度为1D array
的{{1}} 下面,我只使用您给定的两个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()
图表
对于整个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()
,只需替换
dataframe
由range(2)
答案 1 :(得分:0)
此建议与您的数据结构100%不匹配。但是,如果事实确实如此,我们将在稍后处理。
您可以通过构建具有多条迹线的图形来实现所需的目标。如果您希望数据点有点抖动以避免重叠,则可以使用go.Box()
来做到这一点:
情节:
完整代码:
此设置可以在离线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)