Fix label errors in graph visualization (#6369)
This commit is contained in:
parent
debeae2509
commit
d711d648cb
@ -552,20 +552,23 @@ class GraphvizGenerator : public TreeGenerator {
|
|||||||
{"{params}", param_.condition_node_params}});
|
{"{params}", param_.condition_node_params}});
|
||||||
|
|
||||||
static std::string const kEdgeTemplate =
|
static std::string const kEdgeTemplate =
|
||||||
" {nid} -> {child} [label=\"{is_missing}\" color=\"{color}\"]\n";
|
" {nid} -> {child} [label=\"{branch}\" color=\"{color}\"]\n";
|
||||||
auto MatchFn = SuperT::Match; // mingw failed to capture protected fn.
|
auto MatchFn = SuperT::Match; // mingw failed to capture protected fn.
|
||||||
auto BuildEdge =
|
auto BuildEdge =
|
||||||
[&tree, nid, MatchFn, this](int32_t child) {
|
[&tree, nid, MatchFn, this](int32_t child, bool left) {
|
||||||
|
// Is this the default child for missing value?
|
||||||
bool is_missing = tree[nid].DefaultChild() == child;
|
bool is_missing = tree[nid].DefaultChild() == child;
|
||||||
|
std::string branch = std::string {left ? "yes" : "no"} +
|
||||||
|
std::string {is_missing ? ", missing" : ""};
|
||||||
std::string buffer = MatchFn(kEdgeTemplate, {
|
std::string buffer = MatchFn(kEdgeTemplate, {
|
||||||
{"{nid}", std::to_string(nid)},
|
{"{nid}", std::to_string(nid)},
|
||||||
{"{child}", std::to_string(child)},
|
{"{child}", std::to_string(child)},
|
||||||
{"{color}", is_missing ? param_.yes_color : param_.no_color},
|
{"{color}", is_missing ? param_.yes_color : param_.no_color},
|
||||||
{"{is_missing}", is_missing ? "yes, missing": "no"}});
|
{"{branch}", branch}});
|
||||||
return buffer;
|
return buffer;
|
||||||
};
|
};
|
||||||
result += BuildEdge(tree[nid].LeftChild());
|
result += BuildEdge(tree[nid].LeftChild(), true);
|
||||||
result += BuildEdge(tree[nid].RightChild());
|
result += BuildEdge(tree[nid].RightChild(), false);
|
||||||
return result;
|
return result;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -343,6 +343,11 @@ TEST(Tree, DumpDot) {
|
|||||||
|
|
||||||
str = tree.DumpModel(fmap, true, R"(dot:{"graph_attrs": {"bgcolor": "#FFFF00"}})");
|
str = tree.DumpModel(fmap, true, R"(dot:{"graph_attrs": {"bgcolor": "#FFFF00"}})");
|
||||||
ASSERT_NE(str.find(R"(graph [ bgcolor="#FFFF00" ])"), std::string::npos);
|
ASSERT_NE(str.find(R"(graph [ bgcolor="#FFFF00" ])"), std::string::npos);
|
||||||
|
|
||||||
|
// Default left for root.
|
||||||
|
ASSERT_NE(str.find(R"(0 -> 1 [label="yes, missing")"), std::string::npos);
|
||||||
|
// Default right for node 1
|
||||||
|
ASSERT_NE(str.find(R"(1 -> 4 [label="no, missing")"), std::string::npos);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(Tree, JsonIO) {
|
TEST(Tree, JsonIO) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user