具有连续和分类数据的plot中的平行坐标图



假设我有一些具有连续分类数据的数据框df。现在我要做一个包含两种坐标的平行坐标图。是否有可能将这些组合成一个图,使每个数据点线通过所有轴?

在文档中,我确实发现go.Parcoordsgo.Parcats分别对待这些,但我没有找到一种方法来组合它们。这是我的最小示例:

import pandas as pd
import plotly.graph_objs as go
df = pd.DataFrame()
# continuous data
df['x1'] = [1,2,3,4]
df['x2'] = [9,8,7,6]
# categorical data
df['x3'] = ['a', 'b', 'b', 'c']
df['x4'] = ['A', 'B', 'C', 'C']
col_list = [dict(range=(df[col].min(), df[col].max()),
label=col,
values=df[col])
for col in df.keys()
#if col not in ['x3', 'x4']  # only works if we exclude these (uncomment to run)
]
fig = go.Figure(data=go.Parcoords(dimensions=col_list))
fig.show()

下面是一个基于自定义标记名称(ticktext)的解决方案。首先,将每个分类值替换为整数,然后用相应的分类值将自定义刻度定义为字符串:

import pandas as pd
import plotly.graph_objs as go
df = pd.DataFrame()
df['x1'] = [1,2,3,4]
df['x2'] = [9,8,7,6]
df['x3'] = ['a', 'b', 'b', 'c']
df['x4'] = ['A', 'B', 'C', 'C']
keys = df.keys()
categorical_columns = ['x3', 'x4']
col_list = []
for col in df.keys():
if col in categorical_columns:  # categorical columns
values = df[col].unique()
value2dummy = dict(zip(values, range(len(values))))  # works if values are strings, otherwise we probably need to convert them
df[col] = [value2dummy[v] for v in df[col]]
col_dict = dict(
label=col,
tickvals=list(value2dummy.values()),
ticktext=list(value2dummy.keys()),
values=df[col],
)
else:  # continuous columns
col_dict = dict(
range=(df[col].min(), df[col].max()),
label=col,
values=df[col],
)
col_list.append(col_dict)
fig = go.Figure(data=go.Parcoords(dimensions=col_list))
fig.show()

最新更新