在python中使用plotly创建堆叠图或条形图

某某某某

我有这样的数据:

[ ('2018-04-09', '10:18:11',['s1',10],['s2',15],['s3',5])

('2018-04-09', '10:20:11',['s4',8],['s2',20],['s1',10])

('2018-04-10', '10:30:11',['s4',10],['s5',6],['s6',3]) ]

我想最好地绘制这个数据的堆叠图。

X轴会是时间,应该是这样的 在此处输入图片说明

我在油漆中创建了这个图像只是为了展示。X 轴将像普通图表一样显示时间(2018 年 4 月 3 日 10:00)。

我被卡住了,因为字符串值(如 's1' 或 's2' )会在不同的条形图中改变。

只是为了硬编码和验证,我试试这个:

import plotly
import plotly.graph_objs as go
import matplotlib.pyplot as plt
import matplotlib
plotly.offline.init_notebook_mode()

def createPage():

    graph_data = []

    l1=[('com.p1',1),('com.p2',2)('com.p3',3)]

    l2=[('com.p1',1),('com.p4',2)('com.p5',3)]

    l3=[('com.p2',8),('com.p3',2)('com.p6',30)]

    trace_temp = go.Bar(
                x='2018-04-09 10:18:11',
                y=l1[0],
                name = 'top',
                )

    graph_data.append(trace_temp)


    plotly.offline.plot(graph_data, filename='basic-scatter3.html')

createPage()

我得到的错误是Tuple Object is not callable

那么有人可以建议一些代码来说明我如何绘制这些数据。如果需要,我可能会以其他可能有助于绘图的形式存储数据。

编辑:我使用了接受的答案中建议的方法,并成功地使用这样的情节进行了绘图

fig=df.iplot(kin='bar',barmode='stack',asFigure=True)

plotly.offline.plt(fig,filename="stack1.html)

但是我遇到了一个错误:

1.当时间间隔非常接近时,数据在图表上重叠。有没有办法克服。

T先生

您可以使用pandas堆积条形图。优点是您可以pandas轻松创建无论如何必须生成的列/值对表。

from matplotlib import pyplot as plt
import pandas as pd

all_data = [('2018-04-09', '10:18:11', ['s1',10],['s2',15],['s3',5]),
            ('2018-04-09', '10:20:11', ['s4',8], ['s2',20],['s1',10]),
            ('2018-04-10', '10:30:11', ['s4',10],['s5',6], ['s6',3]) ]

#load data into dataframe
df = pd.DataFrame(all_data, columns = list("ABCDE"))
#combine the two descriptors
df["day/time"] = df["A"] + "\n" + df["B"]
#assign each list to a new row with the appropriate day/time label
df = df.melt(id_vars = ["day/time"], value_vars = ["C", "D", "E"])
#split each list into category and value
df[["category", "val"]] = pd.DataFrame(df.value.values.tolist(), index = df.index)
#create a table with category-value pairs from all lists, missing values are set to NaN
df = df.pivot(index = "day/time", columns = "category", values = "val")
#plot a stacked bar chart 
df.plot(kind = "bar", stacked = True)
#give tick labels the right orientation
plt.xticks(rotation = 0)
plt.show()

输出: 在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章