首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Plotly自定义标签

使用Plotly自定义标签
EN

Stack Overflow用户
提问于 2019-01-29 20:44:21
回答 1查看 284关注 0票数 1

我正在尝试自定义悬停时出现的数据标签:

下面的代码给出了上面的输出:

代码语言:javascript
复制
import pandas as pd
import plotly.plotly as py
import plotly.graph_objs as go

# Create random data
labels = ['A', 'B', 'C']
N = 20
df = pd.DataFrame(index = range(N))
standardized_cols = []

for col in labels:
    df[col] = np.random.randn(N)
    standardized_colname  =  col + "_standardized"
    standardized_cols.append(standardized_colname)
    df[standardized_colname] = (df[col]-df[col].mean())/df[col].std()

# Cluster
c = KMeans(n_clusters=3, random_state=1).fit(df[standardized_cols]).labels_

# Plot
trace = go.Scatter3d(
    x=df.A_standardized,
    y=df.B_standardized,
    z=df.C_standardized,

    mode='markers',
    marker=dict(
        size=5,
        color=c,              
        colorscale='Viridis',   
    ),
    name= 'test',
    text= c
)

data = [trace]

fig = go.Figure(data=data, layout=layout)
iplot(fig)

我的数据:

]

该图表显示了标准化列的聚类。但是当将鼠标悬停在数据上时,我希望看到标签中未标准化的数据,例如i.e.something

代码语言:javascript
复制
A: 0,999
B: 0,565
C: 0,765
Cluster: 2

我进行了实验,但不知道如何实现这一点。这个是可能的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-29 23:07:50

您可以执行一些列表理解,并添加您想要text的任何列参见下面的示例(注意,我正在离线绘制):

代码语言:javascript
复制
# data
np.random.seed(1)
labels = ['A', 'B', 'C']
N = 20
df = pd.DataFrame(index = range(N))
standardized_cols = []

for col in labels:
    df[col] = np.random.randn(N)
    standardized_colname  =  col + "_standardized"
    standardized_cols.append(standardized_colname)
    df[standardized_colname] = (df[col]-df[col].mean())/df[col].std()

c = KMeans(n_clusters=3, random_state=1).fit(df[standardized_cols]).labels_

绘图:

代码语言:javascript
复制
import plotly as py
import plotly.graph_objs as go


trace = go.Scatter3d(
    x=df.A_standardized,
    y=df.B_standardized,
    z=df.C_standardized,

    mode='markers',
    marker=dict(
        size=5,
        color=c,              
        colorscale='Viridis',   
    ),
    name= 'test',

    # list comprehension to add text on hover
    text= [f"A: {a}<br>B: {b}<br>C: {c}" for a,b,c in list(zip(df['A'], df['B'], df['C']))],
    # if you do not want to display x,y,z
    # hoverinfo='text'


)


layout = dict(title = 'TEST',)

data = [trace]
fig = dict(data=data, layout=layout)

py.offline.plot(fig, filename = 'stackTest.html')

您可以修改列表理解以显示您想要的任何内容

如果不想显示x,y,z,则添加hoverinfo='text'

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54421402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档