当前位置: 首页 > 知识库问答 >
问题:

无法在底图中使用散点图

禄和宜
2023-03-14

我正在遵循教程可视化:绘制全球地震活动图,以更好地熟悉底图。

我想做的是把熊猫数据集中的数据分散在地图上。

我的映射的初始化代码:

my_map = Basemap(projection='merc', 
                 lat_0=50.93, lon_0=4.13,
                 llcrnrlat=49.339950, llcrnrlon=1.777668,
                 urcrnrlat=51.601360, urcrnrlon=6.925303,
                 resolution='h', area_thresh=1.0)

my_map.drawcoastlines()
my_map.drawcountries()
my_map.fillcontinents(color='coral')
my_map.drawmapboundary()
lat    float64
lon    float64
id       int64
dtype: object
|      |     lat |     lon |   id |
|-----:|--------:|--------:|-----:|
| 1083 | 51.8205 | 4.62573 |    7 |
|  211 | 50.5155 | 3.89612 |    1 |
|   89 | 50.3397 | 4.61034 |    1 |
x,y = my_map(df_loc.lon.tolist(), df_loc.lat.tolist())
my_map.plot(x, y, 'bo', markersize=10)
plt.show()

因为我希望标记的大小依赖于计数(即ID列),所以我需要从plot切换到scatter

如果我尝试:my_map.scatter(x,y,s=10)(即使用固定的大小),结果将是一个空映射(不画点)。

如果你能告诉我我做错了什么,我将不胜感激。奇怪的是,一个规则的散点图工作得很好(可能是一个不好的比较,但仍然):

plt.scatter(df_loc.lon, df_loc.lat, s=df_loc.id, alpha=.3)
plt.ylim(49.339950, 51.601360)
plt.xlim(1.777668, 6.925303)

根据我在文档中读到的内容,如果指定了latlon=true参数,那么将lat/lon转换为map projection的附加步骤应该是不必要的。

如果latlon关键字设置为True,则x、y以度数表示经度和纬度。数据和经度自动移位,以匹配圆柱形和假圆柱形投影的地图投影区域,并将x、y转换为地图投影坐标。

但是,如果我改变这个:

x,y = my_map(df_loc.lon.tolist(), df_loc.lat.tolist())
my_map.plot(x, y, 'bo', markersize=10)
my_map.plot(df_loc.lon, df_loc.lat, 'bo', latlon=True)
SystemError: <class 'RuntimeError'> returned a result with an error set

更新:

似乎plot函数不喜欢将Pandas系列对象作为XY参数传递给它。但是,这段代码确实有效(不同之处在于附加的tolist()调用):

my_map.plot(df_loc.lon.tolist(), 
            df_loc.lat.tolist(), 
            'bo', 
            latlon=True)

共有1个答案

许庆
2023-03-14

这是ZOrder的一个问题。具体地说,fillcontinentszorder大于scatter点的zorder,因此scatter点结束于大陆的填充下面(因此不可见)。

有两种方法可以解决这个问题:

>

  • 减少fillcontinentszorder:

    my_map.fillcontinents(color='coral', zorder=0)
    
    my_map.scatter(x, y, s=10, zorder=10)
    

  •  类似资料:
    • 问题内容: 我想在同一图中创建具有不同数据集的3D散点图,并在其标签中创建图例。我面临的问题是我无法正确添加图例,并且得到了带有空标签的图,如图所示: http://tinypic.com/view.php?pic=4jnm83&s=5#.Uqd-05GP- gQ 。 更具体地说,我得到了错误: 请在下面找到我到目前为止尝试过的示例演示: 我看过其他大致相似的示例,但没有一个使用scatter()

    • 散点图沿 X 和 Y 轴放置的各个数据点来绘制数据。 图表属性 选择图表类型后,可以更改其属性来自定义图表: 选项 描述 常规 背景颜色 设置图表区域的背景颜色。 不透明度 设置背景颜色的不透明度。 显示边框 显示图表外部边框。 边界颜色 设置图表外部边框的颜色。 显示标题 显示图表的主要标题。 标题 指定图表的标题。 标题字体 设置标题的字体样式。 位置 设置标题的位置。 对齐 设置标题的水平对

    • 散点图沿 X 和 Y 轴放置的各个数据点来绘制数据。 图表属性 选择图表类型后,可以更改其属性来自定义图表: 选项 描述 常规 背景颜色 设置图表区域的背景颜色。 显示边框 显示图表外部边框。 边界颜色 设置图表外部边框的颜色。 显示标题 显示图表的主要标题。 标题 指定图表的标题。 标题字体 设置标题的字体样式。 位置 设置标题的位置。 对齐 设置标题的水平对齐方式。 数据 颜色 设置数据系列的

    • 散点图沿 X 和 Y 轴放置的各个数据点来绘制数据。 图表属性 选择图表类型后,可以更改其属性来自定义图表: 选项 描述 常规 背景颜色 设置图表区域的背景颜色。 不透明度 设置背景颜色的不透明度。 显示边框 显示图表外部边框。 边界颜色 设置图表外部边框的颜色。 显示标题 显示图表的主要标题。 标题 指定图表的标题。 标题字体 设置标题的字体样式。 位置 设置标题的位置。 对齐 设置标题的水平对

    • 我有两个列表,日期和值。我想使用matplotlib绘制它们。下面创建了我的数据散点图。 创建线图。 但我真正想要的是一个散点图,其中的点由一条线连接。 与R中的类似: ,这给了我一个点的散点图,上面有一条连接点的线。 如何在python中实现这一点?

    • 散点图用于在水平轴和垂直轴上绘制数据点,它表示了因变量随自变量变化的趋势。通俗地讲,它反映的是一个变量受另一个变量的影响程度。 散点图将序列显示为一组点,其中每个散点值都由该点在图表中的坐标位置表示。对于不同类别的点,则由图表中不同形状或颜色的标记符表示。同时,您也可以设置标记符的颜色或大小。 下面示例,绘制了学生考试成绩的散点图,其中蓝色代表男孩成绩,红色表示女孩的成绩。 代码执行后,输出结果如