【问题标题】:Why are my Matplotlib subplots sized differently?为什么我的 Matplotlib 子图大小不同?
【发布时间】:2023-04-06 12:33:01
【问题描述】:

你好!

我正在尝试在 Matplotlib 中创建一个由叶绿素图和条形图组成的图形。为了实现这一点,我将 Geopandas 库与 Pandas 和 Matplotlib 一起使用。我遇到了一个有趣的问题,我在互联网上找不到任何答案。问题来了:

This link leads to an image that replicates the problem.

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

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

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

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

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

感谢所有提前回答的人!

【问题讨论】:

  • 如果图形大小不同,例如fig = plt.figure(figsize = (10,25)),您会得到什么。在这种情况下,高度 > 宽度。
  • 您好@swatchai,将图形调整为 figsize(10,25) 以使条形图真正绘制为代价解决了空白问题。但是,您的建议给了我一些想法,在 (19.20,19.20) 修复 figsize 解决了这个问题。

标签: python matplotlib gis geopandas


【解决方案1】:

添加解释,因为您找到了一个解决方案。

如果您以您所做的方式指定带有两个轴的 matplotlib 图形,则会将图形分成两半。两个轴是相同的。假设图形的原始比例是 1:1,那么你的轴都是 1:2。

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

但是,如果您希望地图显示正确的非扭曲形状,则不能只指定纵横比。那只是跟随数据。所以如果你有一张地图,它的边界框的比例是 1:1,你不能指望它会填满整个 1:2 的轴。 GeoPandas 会根据地图的比例更改纵横比。

第一个示例在侧面留下间隙而“解决方案”没有的原因是这样的。因为 leftover 空间在轴的顶部和底部,所以它没有显示在解决方案中。因为它在问题的双方,它只是停留在那里。如果您的地块彼此相邻而不是上方,则反之亦然。

希望它更清楚。

【讨论】:

  • 你好。既然您已经解释过了,我似乎很清楚为什么我的可视化显示了观察到的行为。感谢您花时间解释事情!
【解决方案2】:

你好!

swatchai 的评论让我走上了正轨,我找到了罪魁祸首。只需将 figsize 调整为 (19,19) 之类的值即可解决问题。如果有人能解释为什么会发生这种情况,我仍然会很高兴。

以下是 figsize 为正方形 (19,19) 时的样子:

感谢您的努力!

【讨论】:

    猜你喜欢
    • 2021-08-05
    • 2017-03-01
    • 2015-10-18
    • 2015-07-15
    • 2017-07-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多