如何在具有不同密度的matplotlib底图的TOP上绘制散点图

时间:2019-09-19 18:06:49

标签: python matplotlib-basemap

我正在尝试绘制印度不同年份和不同地点的污染水平。

我能够独立获取散点图和底图。但是,在将散布图绘制在地图上指定的地理位置上时,我遇到了困难。结果是将地图放置在散点图的顶部,这不是我想要的。

这是我正在使用的代码:

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 个答案:

答案 0 :(得分:1)

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 :(得分:1)

问题:如何在底图的TOP上绘制密度不同的散点图?

数据:我掌握了印度各个城市的经度和纬度以及不同年份的污染水平。

方法:最初,我已将数据结构分配给变量'df'。将纬度指定为“ y”,将经度指定为“ x”。由于纬度和经度还具有变量'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()