# Sea Level Predictor final check

@sanity @kitanikita Yes; I was able to plot Best fit line 1 as per your guidance. I happen to use the logic and plot from 2000 till 2050 for Best fit line 2? Please correct me if I’m wrong; as it says use data from 2000? Have I plotted “Best fit line 2” incorrectly?
Also; when I run this program it never errors out and doesn’t stop from running either?

``````import pandas as pd
import matplotlib.pyplot as plt
from scipy.stats import linregress
# import numpy as np

def draw_plot():

# Create scatter plot
# plt.figure(figsize=(12,8))
# ax = plt.subplot(1,2,1)
# ax.scatter(x='Year', y ='CSIRO Adjusted Sea Level')
x = df['Year']
y = df['CSIRO Adjusted Sea Level']

plt.xlabel('Year')
plt.scatter(x,y)

# Create first line of best fit

x = df['Year']
y = df['CSIRO Adjusted Sea Level']

slope, intercept, r_value, p_value, std_err = linregress(x,y)

# Dummy variable to calculate First best fit line
x2 = list(range(1880, 2050))
y2 = []

for year in x2:
y2.append(intercept + slope * year)

plt.plot(x2, y2, 'r', label = 'Best Fit Line 1', color='green')

# Create second line of best fit
x3 = list(range(2000, 2020))
y3 = []

for year in x3:
y3.append(intercept + slope * year)

plt.plot(x3, y3, 'r', label = 'Best Fit Line 2')
plt.legend()
plt.show()

plt.xlabel('Year')
plt.ylabel('Sea Level (inches)')
plt.title('Rise in Sea Level')

# Save plot and return data for testing (DO NOT MODIFY)
plt.savefig('sea_level_plot.png')
return plt.gca()
``````

The data for year 2000 onwards follows a different trend. So you need create a separate fit for the data with `year>=2000` and plot it with the new slope and intercept values:

``````xx = df[ df['Year'] >= 2000 ]['Year']
yy = df[ df['Year'] >= 2000 ]['CSIRO Adjusted Sea Level']

fit2 = linregress(xx, yy)
new_slope = fit2.slope
new_intercept = fit2.intercept
``````

Then you can create dummy lists `xx2` and `yy2`, as you did before, and plot them.

1 Like

In one of my earlier topics I raised this where I don’t get any error but the program just never ceases to stop running?? So; I have re-written the whole thing on a new forked project/ assignment thinking this would go away. But; after resolving “dependencies” description is required etc. the issue still remains as is.

``````import pandas as pd
import matplotlib.pyplot as plt
from scipy.stats import linregress

def draw_plot():

# Create Scatter plot
# Previously I tried the folowing code:
# plt.figure(figsize=(12,8))
# ax = plt.scatter(x='Year', y='CSIRO Adjusted Sea Level')

# Start off with X-axis and Y-axis as below
x = df['Year']
y = df['CSIRO Adjusted Sea Level']

plt.xlabel('Year')
plt.scatter(x,y)

# Create FIRST line of best fit
x = df['Year']
y = df['CSIRO Adjusted Sea Level']

# First grab the current Slope & Intercept values
slope, intercept, r_value, p_value, std_err = linregress(x, y)

# Using the above Slope/ Intercept values now plot Best Fit 1
x1 = list(range(1880, 2050))
y1 = []

for year in x1:
y1.append(intercept + slope * year)

plt.plot(x1, y1, 'r', label = 'Best Line Fit 1')
plt.legend()
plt.show()

# Create Second line of Best fit
# SECOND best fit for year 2000 onwards so shall have new slope and intercept

xfuture = df[['Year'] >= 2000] ['Year']
yfuture = df[['Year'] >= 2000] ['CSIRO Adjusted Sea Level']

newfit = linregress(xfuture, yfuture)
newslope = newfit.slope
newintercept = newfit.intercept

for year in xfuture:
yfuture.append(newintercept + newslope * year)

plt.plot(xfuture, yfuture, 'r', label = 'Best Fit Line 2', color='green')
plt.legend()
plt.show()

plt.xlabel('Year')
plt.ylabel('Sea Level (inches)')
plt.title('Rise in Sea Level')

# Save plot and return data for testing (DO NOT MODIFY)
plt.savefig('sea_level_plot.png')
return plt.gca()
``````

Remove the first `plt.show()` – it separates your `plt` into 2 sections.

When creating `xfuture` and `yfuture`:

• Your conditional statement is not `['Year'] >=2000` (because it is not a variable) but `df['Year'] >=2000`.
• So you need to call `df[conditional_statement]` to restrict `df` and then call the `'Year'` column.
• All together this will be:
``````xfuture = df[df['Year'] >= 2000]['Year']
yfuture = df[df['Year'] >= 2000]['CSIRO Adjusted Sea Level']
``````

After you create `newfit`, you still need to create a new set dummy variables to plot its function. So something like

``````xfuture2 = list(range(2000, 2050))
``````

for the x coordinate and as a similar loop to what you did before to fill a new empty list for `yfuture2` (the dummy y variable).

@kitanikita @SupremeSadat @sanity Thank you very much for your assistance; looks like I’m almost close…can you please confirm if I get the two lines Best Fit Line 1 and Best Fit Line 2; is there anything else required to be done?

``````# Create FIRST line of best fit
x = df['Year']
y = df['CSIRO Adjusted Sea Level']

# First grab the current Slope & Intercept values
slope, intercept, r_value, p_value, std_err = linregress(x, y)

# Using the above Slope/ Intercept values now plot Best Fit 1
x1 = list(range(1880, 2050))
y1 = []

for year in x1:
y1.append(intercept + slope * year)

plt.plot(x1, y1, 'r', label = 'Best Fit Line 1')
plt.legend()
# plt.show()

# Create Second line of Best fit
# SECOND best fit for year 2000 onwards so shall have new slope and intercept

xfuture = df[df['Year'] >= 2000] ['Year']
yfuture = df[df['Year'] >= 2000] ['CSIRO Adjusted Sea Level']

newfit = linregress(xfuture, yfuture)
newslope = newfit.slope
newintercept = newfit.intercept

xfuture2 = list(range(2000, 2050))
yfuture2 = []

for xfuture in xfuture2:
yfuture2.append(newintercept + newslope * xfuture)

plt.plot(xfuture2, yfuture2, 'r', label = 'Best Fit Line 2', color='green')
plt.legend()
plt.show()

I think `plt.show()` pauses the script in general. So, if you remove `plt.show()`, from your script that should fix it.