python - 为什么子图的大小不同?

标签 python matplotlib gis geopandas

我正在尝试在 Matplotlib 中创建一个由分区统计图和条形图组成的图形。为了实现这一目标,我将 Geopandas 库与 Pandas 和 Matplotlib 一起使用。我遇到了一个有趣的问题,我在互联网上找不到任何答案。问题是这样的:

This link leads to an image that replicates the problem.

如上图所示,顶部的 map (由 Geopandas 生成)的宽度与底部的条形图的宽度不同。图的左侧和右侧有太多空白。我想摆脱这个空白并使 map 水平适合分配给它的空间。我还在下面留下了一个代码示例,供那些希望重新创建它的人使用:

fig = plt.figure(figsize = (25.60,14.40)) #Here, i am setting the overall figure size

ax_1 = fig.add_subplot(2,1,1) #This will be the map

istanbul_districts.plot(ax = ax_1,
                    edgecolor = "black",
                    alpha = 1,
                    color = "Red") #Istanbul_districts is a GeoDataFrame object.


ax_2 = fig.add_subplot(2,1,2)


labels = list(health.loc[:,"district_eng"].value_counts().sort_values(ascending = False).index)


from numpy import arange
bar_positions = arange(len(labels)) + 1

bar_heights = h_inst_per_district_eng.loc[:,"health_count"].values.astype(int)


ax_2.bar(bar_positions,bar_heights,
    width = 0.7,
    align = "center",
    color = "blue") #This is a generic barplot from Matplotlib

我留下第二张图片,显示上面代码片段的最终结果:

This link also leads to an image that replicates the problem.

从上面可以清楚地看出,两个子图的轴并非在同一位置开始和结束。也许这可能是问题所在?怎样才能使它们的大小相同?

最佳答案

添加说明:

如果您按照您的方式指定具有两个轴的 matplotlib 图,则会将图分成两半。两个轴是相同的。假设图形的原始比例是 1:1,您的轴都是 1:2。

这个任意比率对于条形图来说是很好的,它基本上可以缩放到任何比率。它是水平还是垂直并不重要(从绘图角度来看,而不是数据可视化)。

但是,如果您希望 map 显示正确的、不扭曲的形状,则不能只指定纵横比。这只是遵循数据。因此,如果您有一张 map ,其边界框的比例为 1:1,则您不能指望它会填充整个 1:2 轴。 GeoPandas 更改纵横比以遵循 map 的比例。

第一个示例在侧面留下间隙而“解决方案”没有的原因就是这个。由于剩余空间位于轴的顶部和底部,因此解决方案中未显示它。因为它在问题上是偏向一边的,所以它就留在那里。如果您的绘图彼此相邻而不是在上方,则反之亦然。

关于python - 为什么子图的大小不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62665266/

相关文章:

python - 在事先不知道代码页的情况下将原始字节字符串转换为 Unicode

python - Django Server启动后如何自动启动其他Server

Python Pandas 将日期和时间合并为一列并使用 lineplot 进行绘图

python - scipy.polyfit(x, y, 100) 将是 100 阶多项式,但 matplotlib.pyplot.legend 显示 53?

python - 使图例对应于matplotlib中散点的颜色

javascript - Geojson 文件未显示在 D3.js 中

python - Django:如何在根据发布请求将数据保存到数据库之前检查数据是否正确?

python - Discord.py 机器人获取命令剩余冷却时间

python - pygeocoder 模块不工作

sql - 如何递归查找两个表之间的相交地理