Quit

(* Retrieve graphs with given classes, ie, getGraphs[5,"Planar","Connected",!"Tree"] *)
(* n. AllTrue *)
getGraphs[n_,cl__]:=Module[{},
classes={cl};
allGraphs=GraphData[];
groups=If[MatchQ[#,Not[_]],Complement[allGraphs,GraphData[#[[1]]]],GraphData[#]]&/@classes;
AppendTo[groups,GraphData[n]];
Intersection@@groups
];

showGraphs[graphNames_]:=(
k=5;
graphs=graphNames[[;;Min[(k^2),Length[graphNames]]]];
GraphicsGrid[Partition[Tooltip[GraphData[#],#]&/@graphs,k],ImageSize->400]
);

fl1[lst_]:=Flatten[lst,1];

cages=GraphData["Cage"];
interestingCages=Select[cages,FreeQ[#,"Complete"]&&FreeQ[#,"CompleteBipartite"]&&GraphData[#,"EdgeCount"]<100&&GraphData[#,"VertexCount"]>10&];
showGraphs[interestingCages]

interestingPlanar=Table[getGraphs[k,"Planar","Connected",!"Regular",!"Tree"],{k,20,50}]//fl1;
showGraphs[interestingPlanar]

interestingTree=Table[getGraphs[k,"Tree","Connected",!"Regular",!"Path"],{k,20,50}]//fl1;
showGraphs[interestingTree]

interestingPerfect=Table[getGraphs[k,"Perfect","Connected",!"Planar",!"Regular"],{k,5,100}]//fl1;
showGraphs[interestingPerfect]

interestingClaw=Table[getGraphs[k,"ClawFree","Connected",!"Planar",!"Regular"],{k,5,100}]//fl1;
showGraphs[interestingClaw]