我有一个示例熊猫数据框,如下所示:
D
我想绘制散点数据cnt(y)与day(x),其中将基于id列标记点(彩色/传奇)。
现在,在seaborn / matplotlib中,这非常简单,我知道可以对其进行绘图,并且可以将绘图保存到文件中。
但是,我希望使用plotly / bokeh / d3 / mp3ld 等创建一个交互式情节,最后,将该情节放入url(由我选择或也许是一个基于帐户的帐户)。我的目标也是拥有悬停功能,当我将光标移到特定光标点上时,该功能将向我显示这些点的值。
我已经尝试使用ColumnDataSource的袖扣进行bokeh / plotly ,并尝试了所有方法以获取情节。但是,没有得到我想要的东西。我可以从专家那里获得一些帮助吗?谢谢您的期待。
答案 0 :(得分:1)
此代码以您请求的方式绘制数据。我为数据框中的每个类别创建了一个新的数据框,因此交互式图例也可以使用。生成具有十六进制颜色字符串的数组,其长度为唯一类别数的长度,并将其添加到数据框中以赋予每个类别自己的颜色。
#!/usr/bin/python3
import pandas as pd
from bokeh.models import ColumnDataSource
from bokeh.palettes import all_palettes
from bokeh.plotting import figure, output_file, show
data = {'day': [2, 2, 2, 3, 3, 3, 5, 5, 5], 'id': ['catx', 'kagm', 'dyrt', 'catx', 'kagm', 'dyrt', 'catx', 'kagm', 'dyrt'], 'cnt': [4, 3, 5, 3, 3, 4, 2, 2, 2]}
df = pd.DataFrame.from_dict(data)
output_file('plot.html')
tooltips = [
("day", "@day"),
("id", "@$name"),
("count", "@cnt")]
p = figure(tooltips=tooltips, plot_width=800, plot_height=800)
sources = []
colors = all_palettes['Viridis'][len(set(df['id'].tolist()))]
pd.options.mode.chained_assignment = None #Supress false positive warning
for ID, color in zip(set(df['id'].tolist()), colors):
dfSubset = df.loc[df['id'] == ID]
dfSubset['color'] = color
sources.append(ColumnDataSource(dfSubset))
p.circle(x = 'day', y = 'cnt', legend = 'id', color = 'color', name = 'id', alpha = 0.5, size = 15, source = sources[-1])
p.legend.click_policy="hide"
show(p)