Chr*_*ris 5 python python-3.x pandas plotly
目的是使用plotly文本参数包含多个列的位置绘制一些数据。
这是我的DataFrame:
import pandas as pd
import numpy as np
import plotly as py
import plotly.graph_objs as go
np.random.seed(1)
df = pd.DataFrame({'Mean Age': np.random.randint(40,60,10),
'Percent': np.random.randint(20,80,10),
'Number Column': np.random.randint(100,500,10)},
index=list('ABCDEFGHIJ'))
df.index.name = 'Text Column'
df = df.sort_values('Mean Age')
Run Code Online (Sandbox Code Playgroud)
这是一个示例,该示例显示了如何绘制带有一列文本的数据以在悬停时显示:
# trace for Percent
trace0 = go.Scatter(
x = df.index,
y = df['Percent'],
name = 'Percent',
text = df['Mean Age'], # text to show on hover from df column
mode = 'lines+markers',
line = dict(
color = ('rgb(0,0,255)'), # blue
width = 4)
)
layout = dict(title = 'Test Plot',
xaxis = dict(title = 'Text Column'),
yaxis = dict(title = 'Percent'),
)
data = [trace0]
fig = dict(data=data, layout=layout)
py.offline.plot(fig, filename = 'Test_Plot.html')
Run Code Online (Sandbox Code Playgroud)
我想将另一列的数据添加到text参数中。我可以通过一些列表理解来完成此操作,但是有没有更简单/有效的方法来做到这一点?
我正在寻找与下面类似的输出,但是比使用列表理解更有效的方式:
# column values to list
num = list(df['Number Column'])
age = list(df['Mean Age'])
# trace for Percent
trace0 = go.Scatter(
x = df.index,
y = df['Percent'],
name = 'Percent',
# list comprehension to get the data to show
text = [f'Number Column: {x}; Mean Age: {y}' for x,y in list(zip(num, age))],
mode = 'lines+markers',
line = dict(
color = ('rgb(0,0,255)'), # blue
width = 4)
)
layout = dict(title = 'Test Plot',
xaxis = dict(title = 'Text Column'),
yaxis = dict(title = 'Percent'),
)
data = [trace0]
fig = dict(data=data, layout=layout)
py.offline.plot(fig, filename = 'Test_Plot_Output.html')
Run Code Online (Sandbox Code Playgroud)
小智 8
您还可以执行以下操作:
trace0 = go.Scatter(
x = df.index,
y = df['Percent'],
name = 'Percent',
# string concatenation in pandas
# also the <br> puts the data on a new line in the hover text
text = "Number Column: " + df["Number Column"].astype(str) + "<br>Mean Age: " + df["Mean Age"].astype(str),
mode = 'lines+markers',
line = dict(
color = ('rgb(0,0,255)'), # blue
width = 4)
)
Run Code Online (Sandbox Code Playgroud)