Why is the plot generated from ggplot not showing up?

user4352158 picture user4352158 · Mar 29, 2015 · Viewed 13.7k times · Source

I am unable to display the plot from ggplot. I've tried something like

import pandas as pd
import pylab as plt
import statsmodels.api as sm
from ggplot import *

df = pd.DataFrame.from_csv('file.csv', index_col=None)
x=df['X']
y=df['Y']
plt=ggplot(data=df,aes(x=x, y=y)) +\
    geom_line() +\
    stat_smooth(colour='blue', span=0.2)
plt.show()

Why is it not showing up?

Answer

LondonRob picture LondonRob · Jun 17, 2015

The line plt = ggplot(.... is not right, for a few reasons.

  1. plt is the name you've given the pylab module. plt = will delete it!
  2. data=df is a keyword argument (because of the data= part). They have to go after positional arguments. See the keyword entry of the Python glossary for details. You either need to make the first argument positional by taking out data=, or put it after the positional argument aes(x=x, y=y).
  3. the ggplot call returns a ggplot object, not a pyplot-related thing. ggplot objects have draw() not show().

The developer himself shows here how it's meant to be done:

g = ggplot(df, aes(x=x, y=y)) +\
    geom_line() +\
    stat_smooth(colour='blue', span=0.2)
print(g)
# OR
g.draw()

That last line g.draw() returns a matplotlib figure object so you can also do:

fig = g.draw()

which will give you access to the matplotlib figure, if that's the sort of thing you want to do.