LaHair drove Tommy Hanson's first pitch of the bottom of the fourth high over the right field wall for his eighth homer of the season. One pitch later, Stewart connected on his third - also to right - to make it 2-1.
Soto hit a two-run homer off Chad Durbin in the eighth.
Atlanta threatened with one out in the seventh when Samardzija hit Heyward with a pitch and Tyler Pastornicky singled before pinch-hitter Eric Hinske lined to LaHair at first and he threw to second to double off Heyward and squash the rally.
Hanson (3-3) gave up five hits and two runs in six innings. The loss was just the eighth in the last 26 games for the Braves.
When Braves reliever Eric O'Flaherty hit David DeJesus with a two-out pitch in the bottom of the seventh, home plate umpire Chris Conroy warned both benches, prompting Braves manager Fredi Gonzalez to come out of the dugout. Moments later he was ejected by Conroy.
Demoted Chicago closer Carlos Marmol came in to pitch the eighth and walked the first two batters, eliciting a chorus of boos from the Wrigley Field faithful.
Freddie Freeman lined out before a stolen base and Marmol wild pitch put runners at second and third. Brian McCann took a third strike for the second out and Marmol turned the boos into cheers by striking out Dan Uggla swinging. Marmol then came off the mound screaming, pounding himself on the chest.
Notes: Cubs RHP Matt Garza, slowed by a flu bug that has hit several players, is scheduled to return to the rotation Friday in Milwaukee. He was scratched from his start Sunday. ... Heyward entered the game with a career .342 average against the Cubs and now has five homers against them. ... Braves CF Michael Bourn made two nice running catches, going over his shoulder to grab LaHair's drive in the second and racing to left center to rob Soto of extra bases in the third. He also extended his hitting streak to 11 games with an infield hit to short in the third. ... The Cubs hit back-to-back homers for the first time since last August when Aramis Ramirez and Carlos Pena - neither of whom is still with the team - connected against Washington. ... LaHair has now reached base in 25 straight games. ... Game-time temperature was 56 and a light fog began rolling in during the late innings.