Как можно редактировать текстовый объект по осям Y и X на сетке картографических геопанд.

Этот вопрос возник из-за другой проблемы Stackoverflow 1:

Моя проблема связана с редактированием меток осей X и Y из графика картографии и геопанд. Я хотел бы изменить свой текстовый объект на каждой из моих меток (оси X и Y) в соответствии с определенным правилом.

Например, я хотел бы изменить десятичный разделитель ('.') На разделитель запятой (',') из меток осей X и Y.

Вот код, который не может этого сделать:

import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import geopandas as gpd

Geopandas_DF = gpd.read_file('my_file.shp')

# setting projection and Transform
Projection=ccrs.PlateCarree()
Transform = ccrs.Geodetic(globe=ccrs.Globe(ellipse='GRS80'))

Fig, Ax = plt.subplots(1,1, subplot_kw={'projection': Projection})

Geopandas_DF.plot(ax=Ax, transform=Ax.transData)

gl = Ax.gridlines(crs=Projection , draw_labels=True, linewidth=0.5, 
                  alpha=0.4, color='k', linestyle='--')

gl.top_labels = False
gl.right_labels = False


### Creating a function to change my Ticklabels:

def Ticker_corrector(ax):
        """
    Parameter:ax, axes whose axis X and Y should be applied the function

        """


    ## Correcting the Axis X and Y of the main Axes

        Xticks = ax.get_xticklabels()

        for i in Xticks:
            T = i.get_text()
            T = T.replace('.',',')
            i = i.set_text(T)

            print(T)

        ax.set_xticklabels(Xticks)



        ## Correcting the Axis Y

        Yticks = ax.get_yticklabels()

        for i in Xticks:
            T = i.get_text()
            T = T.replace('.',',')
            i = i.set_text(T)

            print(T)

        ax.set_yticklabels(Yticks)

        return ax

Ax = Ticker_corrector(Ax)

Fig.show()


Одна интересная часть приведенного выше кода заключается в том, что он работает без проблем. Python не указывает на какие-либо ошибки и строит рисунок без предупреждения об ошибке.

Тем не менее, метки остаются неизменными. Поэтому мне нужна помощь с этой проблемой.

Я благодарю вас за ваше время.

Искренне Ваш,


person Philipe Riskalla Leal    schedule 08.02.2019    source источник
comment
ax.set_yticklabels(Yticks) просто нужен простой список текста   -  person Paul H    schedule 10.02.2019
comment
Дорогой Пол Х., спасибо за ответ. Я попробовал ваш вариант, но по какой-то неизвестной мне причине мой график Geoaxes Geopandas не изменил свои метки yticklabels. Я просто не мог решить это обычными средствами. Единственное решение, которое я нашел, представлено ниже (хотя оно может не работать вечно и для каждого сценария).   -  person Philipe Riskalla Leal    schedule 12.02.2019


Ответы (1)


Я считаю, что нашел решение. Возможно, это не всегда срабатывает, но, безусловно, решило мою проблему.

Фундаментальной основой для решения было установить "Locale" моей библиотеки matplotlib перед созданием моего графика.

Вот пример:

import locale
locale.setlocale(locale.LC_ALL, "Portuguese_Brazil.1252")
import matplotlib as mpl
mpl.rcParams['axes.formatter.use_locale'] = True


import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import geopandas as gpd

Geopandas_DF = gpd.read_file('my_file.shp')

# setting projection and Transform
Projection=ccrs.PlateCarree()
Transform = ccrs.Geodetic(globe=ccrs.Globe(ellipse='GRS80'))

Fig, Ax = plt.subplots(1,1, subplot_kw={'projection': Projection})

Geopandas_DF.plot(ax=Ax, transform=Ax.transData)

gl = Ax.gridlines(crs=Projection , draw_labels=True, linewidth=0.5, 
                  alpha=0.4, color='k', linestyle='--')

gl.top_labels = False
gl.right_labels = False


Fig.show()

person Philipe Riskalla Leal    schedule 11.02.2019