使用plotly在jupyter中实现matplotlib堆叠条形图的交互

使用plotly在jupyter中实现matplotlib堆叠条形图的交互,matplotlib,plotly,jupyter,interactive,Matplotlib,Plotly,Jupyter,Interactive,第一次使用jupyter&plotly,所以我真的很挣扎 这是我的密码 # import packages import pandas as pd import matplotlib.pyplot as plt import matplotlib.gridspec as gridspec import numpy as np import seaborn as sns import plotly.plotly as py import plotly.tools as tls from plot

第一次使用jupyter&plotly,所以我真的很挣扎

这是我的密码

# import packages
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
import numpy as np
import seaborn as sns
import plotly.plotly as py
import plotly.tools as tls

from plotly.graph_objs import *
py.sign_in("x", "y")

tls.set_credentials_file(username='x', api_key='y')
tls.get_credentials_file()

fig1 = plt.figure()

%matplotlib notebook

# load data
revels_data = pd.read_csv("directory.data.txt")
rd = revels_data

# grouped bar plot
grouped = rd.groupby(["Packet number", "Flavour"])["Contents"].sum().unstack().fillna(0)
grouped.plot(kind="bar", stacked=True, color=["#a2653e", "#a6814c", "#fd5956", "#fd8d49", "#9c6da5", "#c9ae74"])

# title and axis labels
plt.title("NUMBER OF REVELS PER PACKET", weight="bold")
plt.ylabel("Contents")
plt.xlabel("Packet")

# plot median line
median = 19
plt.axhline(median, color='grey', linestyle='dashed', linewidth=0.5)

# legend properties
plt.legend(loc=2, prop={"size":7})

# extend y axis to fit legend in
axes = plt.gca()
axes.set_ylim([0,30])

# show plot
plt.show()
这将生成绘图:

这显示在jupyter fine中

现在,我想做的是添加悬停功能,基本上与此示例完全相同:

将鼠标悬停在每个条上显示每包的风味分布

i、 e:以下各项的单个选项卡: 总数:a, 橙色:b, 太妃糖:c, 等 当鼠标悬停在每个包装的条形图上时,以各自的颜色显示

我拉小提琴已经有三个小时了,但我已经一筹莫展了

请帮忙,谢谢

编辑:


错误:AttributeError:“function”对象没有属性“grouped”

如果已经有轴,可以使用
ax
参数将其提供给dataframe
df
的Panda plot函数

fig, ax = plt.subplots()
df.plot(... , ax=ax)
请尝试此代码(不保证它能正常工作,因为我无法将其文本化):


您显示的代码似乎工作正常。但是,为了帮助您,您需要了解无法使用的代码。因此,原则上,链接示例向您展示了该做什么;因此,您需要实现这一点并更新您的问题。然后,你需要非常具体地说明结果是什么,以及结果与你期望的相差多远。如果您遇到错误,请报告错误跟踪。但我的代码完全不同。给出的示例有手动输入的数据、手动创建的绘图等。我想知道是否可以使用我现有的所有设计参数,同时使其具有交互性。这个过程与我发布的示例大不相同,我只是将其发布为我试图实现的目标的可视化表示。是的,你可以做到,它的工作方式与你链接到的示例完全相同。目前还不能回答这个问题,因为它实际上只是复制了示例代码。同样,如果您在实现它时遇到问题,请显示导致问题的代码的一部分。请帮助我添加一些数据以复制它,我们无法访问
“directory.data.txt”
TypeError:plot()缺少1个必需的位置参数:“figure\u或\u data”,我应该在py.plot()中放置什么?ax和plotly_fig都给出了类型错误:类型为“AxeSubPlot”的参数不可编辑,PlotlyEmptyData错误:找到空数据列表。我分别更新了代码。为了测试代码,我需要发明一些数据帧。这是问问题的人应该做的。这太棒了,欧内斯特,谢谢。不过我有一个关于数据帧的问题。与随机生成的值相比,我在使用csv文件中的实际数据时做了哪些更改?谢谢again@importantofbeingernest最后一个问题:有没有办法从根本上扩大情节?它太拥挤了
fig, ax = plt.subplots()
df.plot(... , ax=ax)
# import packages
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
import plotly.offline as py
import plotly.tools as tls

from plotly.graph_objs import *
#py.sign_in("x", "y")

#tls.set_credentials_file(username='x', api_key='y')
#tls.get_credentials_file()

#%matplotlib notebook

# load data
flavours=["orange", "toffee", "chocolate", "malteser", "raisin", "coffee"]
num = np.arange(0, 6*36) % 36
flavs = np.random.choice(flavours, size=len(num))
conts = np.random.randint(0,6, len(num))

rd = pd.DataFrame({"Packet number":num ,"Flavour":flavs,"Contents" : conts})

fig1 = plt.figure(figsize=(10,8))
ax = fig1.add_subplot(111)

# grouped bar plot
grouped = rd.groupby(["Packet number", "Flavour"])["Contents"].sum().unstack().fillna(0)
grouped.plot(kind="bar", stacked=True, legend=False,
             color=["#a2653e", "#a6814c", "#fd5956", "#fd8d49", "#9c6da5", "#c9ae74"], ax=ax)

#ax.plot([1,3])

# title and axis labels
plt.title("NUMBER OF REVELS PER PACKET")
plt.ylabel("Contents")
plt.xlabel("Packet")

# plot median line, not shown in plotly
median = 19
ax.axhline(median, color='grey', linestyle='dashed', linewidth=0.5)


# show plot
plotly_fig = tls.mpl_to_plotly(fig1)

# For Legend
plotly_fig["layout"]["showlegend"] = True
# change this to label the legend
#plotly_fig["data"][0]["name"] = "Men"
#plotly_fig["data"][1]["name"] = "Women"


plot_url = py.plot(plotly_fig, filename='stacked-bar-chart.html')