【问题标题】:Same width and height axis in matplotlib for every plotmatplotlib 中每个图的宽度和高度轴相同
【发布时间】:2019-12-05 03:49:36
【问题描述】:

我使用 matplotlib 和 geopandas 制作了地图(绘图)。我有两个数据框,一个包含整个国家的 shapefile,另一个包含一个地区。像这样;

df = geopandas.read_file('data/jamoat_exposure.shp')
df1 = df.query("DISTRICT=='Spitamen'")

我必须将两个数据框都添加到单个图中。所以我像这样把它们放在同一个轴上

df.plot(ax=ax, color='white', edgecolor='grey', label='what')
df1.plot(column='AGRI_AREA', ax=ax, cmap='tab20', edgecolor='#000000', label=df1['AGRI_AREA'])

但它会生成一个地图,其轴延伸到 df(国家标签)。然后我根据 df1 几何设置 xlim 和 ylim。

x1, y1, x2, y2 = df1.geometry.total_bounds
ax.set_xlim(x1-5000, x2+5000)
ax.set_ylim(y1-5000, y2+5000)

颜色部分来自 df1,其他背景线来自 df。此图适用于一个地区。如果我选择 df1 作为另一个区(df1=df.query(DISTICT='Ahuti')),它会产生具有不同轴的图形。像这样;

我希望所有地图都具有相同的宽度和高度(相同的 figsize)。我认为,我必须动态添加轴限制,以便它与实际大小相匹配。但我不知道怎么做?有什么想法吗?

【问题讨论】:

  • 离开stackoverflow.com/questions/44970010/… 的答案,有一个fixed size axis demo 可能有效。您的每张地图都是单独的数字还是使用gridspec? (默认情况下,轴的大小相同)
  • 对不起,我不是这样的。我希望所有DISTRICT 的轴的宽度和高度都相同,即使是shapefile 区也不同
  • 那么为什么演示不适用于您的任务?另外,将轴设置为相等会扭曲投影/几何吗? (基本上这对您的数据是有效的)
  • 如果 x 和 y 是东向和北向,那么您可以 set_aspect(1)。要使子图大小相同,请执行 set_xlim/ylim to mean(x) + [-dx, dx] 其中 dx 大到足以覆盖最大的地图。
  • 抱歉,我不必涵盖所有地图。我只需要显示df1df2 仅用于底图。由于df1 中几何形状和大小的变化,我无法将地图设置在相同的宽度和高度轴上。

标签: python matplotlib geopandas


【解决方案1】:

感谢@Jody。根据您的建议,我将代码更新如下。这对我有用

max_range = np.array([x2-x1, y2-y1]).max()/2.0
axis.set_xlim((x1+x2)*0.5-max_range, (x1+x2)*0.5+max_range)
axis.set_ylim((y1+y2)*0.5-max_range, (y1+y2)*0.5+max_range)

【讨论】:

    猜你喜欢
    • 2015-05-17
    • 1970-01-01
    • 1970-01-01
    • 2015-05-20
    • 2018-12-29
    • 1970-01-01
    • 1970-01-01
    • 2015-01-01
    • 1970-01-01
    相关资源
    最近更新 更多