你好!
我正在尝试在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
我要留下第二张图像,显示上面代码片段的最终结果:
This link also leads to an image that replicates the problem.
在上面可以清楚地看到,两个子图的轴不在同一位置开始和结束。也许这可能是问题所在?如何使它们大小相同?
感谢所有那些提前回答的人!
答案 0 :(得分:2)
添加解释,因为您找到了一个解决方案。
如果您以指定的方式用两个轴指定matplotlib图形,则会将图形分成两半。两个轴是相同的。假设图形的原始比例为1:1,则您的坐标轴均为1:2。
对于条形图,此任意比率都可以,基本上可以将其缩放为任何比率。水平或垂直(从绘图角度看,而不是数据可视化)都没关系。
但是,如果您希望地图显示正确的不变形形状,则不能仅指定纵横比。紧随数据之后。因此,如果您有一个地图,其边界框具有1:1的比例,则不能指望它会填满整个1:2轴。 GeoPandas更改纵横比以遵循地图的比例。
第一个示例在侧面留出空白而“解决方案”没有留空的原因不是这样。由于 leftover 空间位于轴的顶部和底部,因此未在解决方案中显示。因为它是问题的一面,所以它就一直存在。如果您的地块彼此相邻而不是在上方,那么反之亦然。
希望它更清晰
答案 1 :(得分:0)