CHICAGO -- Ryan Sweeney credited his teammates with helping him have one of his best days at the ballpark.
The center fielder drove in runs in each of his first four at-bats, capping the stretch with his longball to right-center. He also had two doubles and a run-scoring grounder in the second inning.
"Anytime you're scoring 14 runs with 16 hits, it's contagious," said Sweeney, who started in place of the injured David DeJesus. "Everybody hit the ball great today and it was fun to watch."
Chicago first baseman Anthony Rizzo added a two-run home run and finished 3 for 3 with four runs scored and four RBIs.
Chicago scored its most runs and had its most hits (16) this season. All nine starters reached base for the Cubs.
"We have to give ourselves opportunities and eventually, somebody is going to come through," Rizzo said. "So we just have to keep giving ourselves opportunities."
The Cubs' outburst helped erase a pair of errors from shortstop Starlin Castro, who now leads the majors with 14 errors this season. Castro has also struggled at the plate, with just 13 hits in his last 98 at-bats.
"The whole thing is not going real well right now so hopefully this day off can recharge him and get things going in Milwaukee," Cubs manager Dale Sveum said about Castro.
Starting pitcher Jeff Samardzija (5-7) won his second straight, with five strikeouts and no walks. It was his first start without yielding a walk this season.
"Anytime I don't walk somebody, usually the outcome is in the positive side of things," Samardzija said. "I attacked the zone, had a couple of three-ball counts, just wanted to stay there and not give any freebies up and just let our defense work."
Houston pitcher Jordan Lyles (4-2) lost for the first time since May 12.
"We got him to throw a lot of pitches and his velocity started going down," Sweeney said. "We made him throw more and get away from his strength (the fastball) and make him throw more off-speed pitches and we hit him."
Houston first baseman Chris Carter finished with a career-high three doubles among his four hits. He drove in two runs and scored twice.
"It was good to see him drive the ball the other way," Astros manager Bo Porter said. "He's been doing that this last week or so and it's coming together."
Chicago pulled away in the fifth inning with consecutive hits by Alfonso Soriano, Rizzo and Sweeney. Each scored to give Chicago an 8-3 lead. Soriano hit his first triple of the season and Rizzo then hit a looping single to shallow center field. Sweeney's double sent Houston center fielder Justin Maxwell sprinting toward the warning track and the ball bounced off his glove. Rizzo beat the relay throw to home plate. Second baseman Darwin Barney added a two-out RBI single to score Sweeney.
Jose Altuve tried sparking an Astros rally for the second straight day, this time leading off the fourth with a single. Jason Castro followed with a double and Altuve scored on J.D. Martinez's groundout.
Carter had a run-scoring double to center field and Castro scored on Starlin Castro's first error, a wild throw on a routine grounder by Matt Dominguez.
Chicago jumped out to a 5-0 lead in the bottom of the third inning. Samardzija started the inning with a single and the Cubs loaded the bases on an error by shortstop Marwin Gonzalez and a walk. Nate Schierholtz hit a two-run single to get the scoring started. Rizzo followed with a sacrifice fly to right field and Sweeney doubled in two more runs.
The Cubs are expected to make a roster move, possibly adding a position player, before Tuesday's game against the Brewers. The Cubs currently have 13 pitchers in the majors. . Sveum watched the Chicago Blackhawks' victory over the Boston Bruins in Game 5 of the Stanley Cup Finals on Saturday night. He said if he could live another life he would be a hockey player. "It's such a true sport," Sveum said. "You can't do anything but play hard the whole game. It's OK to be physical. It's OK to fight." . Houston center fielder Maxwell hit in the leadoff position for the first time this season.