partykit
包可以很好地表示决策树。我遇到的唯一问题是标签很长然后重叠。是否可以移动这些标签以防止它(参见下图中的蓝色箭头)?
library("rpart")
library("partykit")
rp <- rpart(Kyphosis ~ Age + Number + Start, data = kyphosis)
party_rp <- as.party(rp)
plot(party_rp)
答案 0 :(得分:3)
绘制边缘标签testing_on
的默认面板功能实现了一些理由策略:标签可以group_size = 3
df.sort_values(['loc_number', 'loc_time'], inplace=True)
df2 = (
df
.assign(
status='testing',
loc_counter=df.groupby('loc_number')['loc_number']
.transform(lambda group: [i // group_size for i in range(len(group))]))
.groupby(['loc_number', 'loc_counter'])
.agg({'loc_time': 'last', 'loc_number': 'last', 'loc_counter': 'count', 'status': 'last'})
.rename(columns={'loc_counter': 'count'})
.reset_index(drop=True)
)
df2['ID'] = range(1, len(df2) + 1)
df2 = df2[['ID', 'loc_time', 'loc_number', 'status', 'count']]
first_group_items = [group[0] for group in df2.groupby('loc_number').groups.itervalues()]
last_group_items = [group[-1] for group in df2.groupby('loc_number').groups.itervalues()]
df2.loc[last_group_items, 'status'] = 'testing_off'
df2.loc[first_group_items, 'status'] = 'testing_on'
df2 = df2.set_index('ID')
>>> df2
loc_time loc_number status count
ID
1 03:28.5 1105 testing_on 3
2 06:25.5 1105 testing 3
3 10:25.6 1105 testing 3
4 13:26.0 1105 testing 3
5 17:26.0 1105 testing 3
6 20:25.7 1105 testing 3
7 24:25.7 1105 testing 3
8 27:25.7 1105 testing_off 2
9 22:25.7 1106 testing_on 3
10 22:35.7 1106 testing_off 1
11 22:33.7 1107 testing_on 1
跨越边缘,edge_simple
,"alternate"
或{ {1}}。但是,这些理由策略仅从最小标签长度"decreasing"
开始使用,默认为"increasing"
(即没有理由)。有关详细信息,请参阅"equal"
。
您希望查看一个示例,其中对齐justmin
且始终应用(即Inf
):
?edge_simple