CHICAGO -- Cubs catcher Geovany Soto showed his toughness and power, all in one day.
Soto slammed a two-out solo shot off reliever Wilton Lopez (5-2) to snap a 4-all tie and cap Chicago's comeback. Four innings earlier, he was flattened at the plate by a charging Michael Bourn but held onto the ball and made the tag.
"How about that?" Cubs interim manager Mike Quade said. "To take one in the face on a play at the plate and then do that. He's a lot tougher than people know. Obviously he had a great day.
"He's getting back to where he was his rookie year."
Soto, hitting .284 with 17 home runs, said he wasn't necessarily thinking about hitting a home run when he stepped into the box in the eighth at windy Wrigley Field.
"I just wanted to make solid contact, maybe an extra-base hit," Soto said. "I got a pretty good pitch and I put good wood on it."
Marlon Byrd hit a two-run homer and Chicago got a useful outing from starting pitcher Casey Coleman, who lasted six innings. Coleman gave up eight hits and four runs -- all in the second.
"That was about as hard as you can battle to keep in that thing," Quade said. "He made a bunch of pitches  in a short period of time and gave us a chance."
Cubs reliever Andrew Cashner (2-5) pitched a perfect eighth for the win. Carlos Marmol handled the ninth and earned his career-high 28th save.
Houston starter Wandy Rodriguez went seven innings, allowing four runs and eight hits while striking out six.
"I threw the ball well," he said. "I wanted to throw the eighth inning but [manager Brad Mills] said, 'No. I want somebody to hit for you.' I felt strong today ... [and] tried to keep my pitches down. I tried to keep the ball down the whole game because I saw the wind was blowing hard."
The Cubs trailed 4-0 after 1½ innings but got three runs back in the third on Blake DeWitt's RBI single and a two-run homer by Byrd. They tied it in the fifth when Jeff Baker lined a double down the left-field line to score Darwin Barney, who singled.
The Astros batted around in the second, starting with Chris Johnson's leadoff homer. He lined Coleman's 1-1 pitch deep into the left-field bleachers for his seventh of the season.
Matt Downs walked, Jason Castro singled and the runners advanced to second and third following an error by Cubs outfielder Alfonso Soriano. Downs scored on a wild pitch.
Back-to-back singles from Jeff Keppinger and Hunter Pence brought home Castro and Bourn, who reached when he was hit by a pitch.
The Cubs scored three in the third, with the big blow coming on Byrd's two-out homer that also scored DeWitt. It was his first home run since Aug. 11 and his 12th overall.
"I don't know how he hit it because the ball was inside," Rodriguez said.
The victory was the Cubs' fourth in five games. The Astros, meanwhile, came in with five wins in their last six games and still have an 8-5 edge over Chicago in the season series.
A strained right quadriceps kept Cubs 3B Aramis Ramirez out of the lineup. "They're going to look at him later today. It's a day-to-day type of thing," Quade said. ... Also out was rookie SS Starlin Castro, benched by Quade after he made a mistake in the seventh inning of Sunday's 18-5 loss to the Mets. Castro lost track of the number of outs and failed to run out a grounder that ended up a double play.