Python 为什么我的Matplotlib子地块大小不同?

Python 为什么我的Matplotlib子地块大小不同?,python,matplotlib,gis,geopandas,Python,Matplotlib,Gis,Geopandas,你好 我试图在Matplotlib中创建一个由叶绿体图和条形图组成的图形。为了实现这一点,我将使用Geopandas库以及Pandas和Matplotlib。我遇到了一个有趣的问题,我在网上找不到任何答案。问题是: 如上图所示,顶部的地图(由Geopandas生成)与底部的条形图的宽度不同。图的左侧和右侧有太多的空白。我想去掉这些空白,使地图水平地适合分配给它的空间。我还在下面为那些希望重新创建它的人留下一个代码示例: fig = plt.figure(figsize = (25.60,14.

你好

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

如上图所示,顶部的地图(由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
我将留下第二个图像,显示上述代码片段的最终结果:

从上面可以清楚地看到,两个子地块的轴线不在同一位置开始和结束。也许这就是问题所在?怎样才能使它们的尺寸相同


感谢所有提前回答问题的人

你好

swatchai的评论让我走上了正确的道路,我找到了罪犯。简单地将figsize调整为(19,19)这样的值就解决了这个问题。如果有人能确切解释为什么会发生这种情况,我还是会很高兴的

下面是当figsize是正方形(19,19)时的样子:


谢谢你的努力

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

如果按指定方式指定带有两个轴的matplotlib地物,则会将地物拆分为两半。两个轴是相同的。假设这个图形的原始比率是1:1,你的轴都是1:2

对于条形图来说,这种任意的比率是合适的,条形图基本上可以缩放为任何比率。它是水平的还是垂直的(从绘图的角度来看,而不是从数据viz的角度来看)没有多大关系

但是,如果希望贴图显示正确的非扭曲形状,则不能仅指定纵横比。这就跟数据一样。因此,如果你有一个贴图,它的边界框有1:1的比例,你不能期望它会填满整个1:2轴。GeoPandas更改纵横比以跟随贴图的比例

第一个例子留下空白而“解决方案”没有的原因是这样的。因为剩余空间位于轴的顶部和底部,所以它不会显示在解决方案中。因为它在这个问题上是站在一边的,所以它只是停留在那里。如果你的图彼此相邻,而不是在上面,那么反之亦然


希望更清楚。

如果图形大小不同,比如说,
fig=plt.figure(figsize=(10,25))
,你会得到什么。在本例中,height>width.Hello here@swatchai,将figure调整为figsize(10,25),以使条形图真正打印为代价,解决了空白问题。但是,你的建议给了我一些想法,将figsize改为(19.20,19.20)解决了这个问题。您好。既然你已经解释了,我似乎很清楚为什么我的可视化显示了观察到的行为。谢谢你花时间解释事情!