2016-11-25 4 views
0

Я тестирую библиотеку геоданных для простого упражнения: отображение нескольких точек на карте, а затем наложение большого круга выше, чтобы удалить часть из них with the difference method.Geopandas: отображение нескольких слоев на ноутбуке iPython

Чтобы проверить, что трансформация работает нормально, я использую ноутбук iPython для просмотра моих разных слоев.

Итак, вот Начальный моей манипуляции:

%matplotlib inline 
# this line is just for a correct plotting in an iPython nb 
import pandas as pd 
import geopandas as gp 
from shapely.geometry import Point 

df = pd.read_csv("historical_monuments.csv", sep = ",") 
geometry = [Point(xy) for xy in zip(fichier.Longitude, fichier.Latitude)] 
# I convert two columns of my csv for geographic information displaying 
df = df.drop(['Longitude', 'Latitude'], axis = 1) 
# just delete two columns of my first df to avoid redundancy 
geodf = gp.GeoDataFrame(file, crs=None, geometry=geometry) 

Тогда, чтобы увидеть мои очки, я просто написал:

geodf.plot(marker='o', color='red', markersize=5) 

Вот результат:

enter image description here

Это супер хорошо. Теперь я просто хочу добавить в этот слой точку с большим радиусом. Я попытался это:

base = gdf.plot(marker='o', color='red', markersize=5) 
# the first plotting becomes a variable to reuse it 
center_coord = [Point(6.18, 48.696000)] 
center = gp.GeoDataFrame(crs=None, geometry=center_coord) 
circle = center.buffer(0.001) 

Тогда, я просто подумал, что это команда будет достаточно:

circle.plot(ax=base, color = 'white') 

Но вместо графического отображения, мой ноутбук возвращается:

<matplotlib.axes._subplots.AxesSubplot at 0x7f763bdde5c0> 
<matplotlib.figure.Figure at 0x7f763be5ef60> 

И я не нашел, что может быть неправильным до сих пор ...

ответ

1

Ну, я думаю, вы не выполнили свой код в пределах o ne Cell ... для какого-то странного поведения сюжет не отображается, если выполняется над несколькими ячейками ... Я мог бы реплицировать вашу проблему, однако, когда я выполнил код в одной ячейке, появился сюжет.

%matplotlib inline 
import pandas as pd 
import geopandas as gp 
import numpy as np 
import matplotlib.pyplot as plt 
from shapely.geometry import Point 

# Create Fake Data 
df = pd.DataFrame(np.random.randint(10,20,size=(10, 3)), columns=['Longitude','Latitude','data']) 

# create Geometry series with lat/longitude 
geometry = [Point(xy) for xy in zip(df.Longitude, df.Latitude)] 

df = df.drop(['Longitude', 'Latitude'], axis = 1) 

# Create GeoDataFrame 
geodf = gp.GeoDataFrame(df, crs=None, geometry=geometry) 


# Create Matplotlib figure 
fig, ax = plt.subplots() 

# Set Axes to equal (otherwise plot looks weird) 
ax.set_aspect('equal') 


# Plot GeoDataFrame on Axis ax 
geodf.plot(ax=ax,marker='o', color='red', markersize=5) 
# Create new point 
center_coord = [Point(15, 13)] 
center = gp.GeoDataFrame(crs=None, geometry=center_coord) 
# Plot new point 
center.plot(ax=ax,color = 'blue',markersize=5) 
# Buffer point and plot it 
circle = center.buffer(10) 
circle.plot(color = 'white',ax=ax) 

Final plot

пс: Btw у вас есть некоторые переменные перепутаны

+0

Привет, щебет и большое спасибо за ваш ответ. Просто протестировал решение, но получил _NameError: имя «plt» не определено_ для plt.subplots() ... Какой модуль я пропустил? EDIT: отлично работает! – Raphadasilva

+0

О, yeha, это была моя ошибка, я забыл добавить «import matplotlib.pyplot as plt» – schlump

2

Команда

%matplotlib inline 

производит статический участок. Как только он появится в вашем ноутбуке, он больше не может быть изменен. Вот почему вы должны поместить свой код в одну ячейку, как сказал schlump.

Альтернативой может быть переход на базовую часть ноутбука, которая является интерактивной, и позволяет вам изменять свой сюжет по нескольким ячейкам. Для активного использования просто используйте

%matplotlib notebook 

вместо встроенного.