Как построить точечный график на вершине базовой карты matplotlib с различной плотностью - PullRequest
1 голос
/ 19 сентября 2019

Я пытаюсь нанести на график уровни загрязнения в разные годы и в разных местах Индии.

Я могу получить график рассеяния и базовую карту независимо.Однако я сталкиваюсь с трудностями при построении этого точечного графика в указанном географическом местоположении на карте.В результате карта помещается в верхнюю часть графика рассеяния, а это не то, что мне нужно.

Вот код, который я использую:

import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
import pandas as pd
m = Basemap(projection='mill',
            llcrnrlat = -80,#llcrncrlat=lower left corner latitude
            llcrnrlon = -180,
            urcrnrlat = 80,
            urcrnrlon = 180,
            resolution = 'l')
df = pd.read_csv('dust.csv')
x = df[['y']]
y = df[['x']]
colors = df[['y1']]
#m.drawcoastlines()
#m.drawcountries(linewidth=2)
#m.scatter(df['x'],df['y'],s=colors, alpha=0.5, cmap='viridis')
plt.scatter(x,y,s=colors, alpha=0.5, cmap='viridis')
plt.colorbar()
plt.show()

Ответы [ 2 ]

1 голос
/ 24 сентября 2019

Задача: Как построить точечный график с различными плотностями на вершине базовой карты?

Данные: У меня широта и долгота разных городовв Индии наряду с их уровнями загрязнения разных лет.

Подход: Первоначально я присвоил структуру данных переменной 'df'.Назначены широты для «у» и долготы для «х».Поскольку широта и долгота также содержат переменные 'y' и 'x', в ней я использовал 'df [' x ']. Values', чтобы получить только числовые значения.Принимая во внимание геометрическое положение Индии, я составил карту.Следующий набор - взять эти широты и долготы в ту же переменную, что и карта.Это было крайне важно, без чего я не мог наблюдать разброс сюжет.Взяв цвет в качестве третьей переменной, я построил график рассеяния, и уровни загрязнения имеют различную плотность.

Map of India containing the pollution levels at different cities of the year 2013

КОД:

import pandas as pd
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap

# make up some data for scatter plot
df = pd.read_csv('dust.csv')
x = df[['y']].values
y = df[['x']].values
fig = plt.gcf()
fig.set_size_inches(8, 6.5)

m = Basemap(projection='mill',
            llcrnrlat = 6.5,#llcrncrlat=lower left corner latitude
            llcrnrlon = 66,
            urcrnrlat = 36,
            urcrnrlon = 98,
            resolution = 'l')

#m.bluemarble(scale=0.2)   # full scale will be overkill
m.drawcoastlines(linewidth=1)# add coastlines
m.drawcountries(linewidth=1)

# transform coordinates
#plt.subplot(221)
x,y=m(x,y)
plt.scatter(x, y,s=df.iloc[1:,2], alpha = 0.5, cmap='viridis')
plt.colorbar()


plt.show()
1 голос
/ 23 сентября 2019
import pandas as pd
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap

# make up some data for scatter plot
df = pd.read_csv('dust.csv')
x = df[['y']].values
y = df[['x']].values
fig = plt.gcf()
fig.set_size_inches(8, 6.5)

m = Basemap(projection='mill',
            llcrnrlat = 6.5,#llcrncrlat=lower left corner latitude
            llcrnrlon = 66,
            urcrnrlat = 36,
            urcrnrlon = 98,
            resolution = 'l')

#m.bluemarble(scale=0.2)   # full scale will be overkill
m.drawcoastlines(linewidth=1)# add coastlines
m.drawcountries(linewidth=1)

# transform coordinates
#plt.subplot(221)
x,y=m(x,y)
plt.scatter(x, y,s=df.iloc[1:,2], alpha = 0.5, cmap='viridis')
plt.colorbar()


plt.show()
...