在Geopandas中编辑Colorbar(图例)?

时间:2018-11-05 16:11:45

标签: python pandas visualization geopandas choropleth

我要在创建的Geopandas世界choropleth中使用颜色栏编辑多个内容。即大小(以便它与地图本身大致匹配),文本大小(当前显示得太小),我还想为其添加标签。从阅读的内容来看,似乎没有一种简单的方法可以在geopandas中明确地做到这一点,所以我想知道是否有人可以提供任何解决方法?任何帮助将不胜感激。

这是我当前正在使用的一段代码(在某些情况下,中间部分只是将列表与国家/地区的数字合并在一起,我将其用作颜色的基础)

public function insertAction()
{
    $insert = new Products();

    if($this->request->hasFiles(true) == true)
    {
        $image = $this->request->getUploadedFiles();
        foreach($image as $file)
        {
            if($this->imageCheck($file->getRealType()))
            {
                $file->moveTo('uploads/shop/' . $file->getName());

                $image = new Imagick('uploads/shop/' . $file->getName());   
                #Resize & Crop Image
                if($image->getWidth() >= 501 || $image->getHeight() >= 501)
                {                        
                    $image->resize(500,500);
                    $image->crop(500,500,0,0);
                }   
                $image->text('FireFly', TRUE, TRUE, 100, '#ddd', 30, ''); 
                $image->render(NULL, 60); 
                $image->sharpen(10);
                $imgName = md5(uniqid(rand(), true)).strtolower(date('-dmy-').$file->getName());
                $image->save($_SERVER['DOCUMENT_ROOT'] . '/shopping/public/uploads/shop/'.$imgName);
                unlink('uploads/shop/' . $file->getName());                        
            }
            else
            {
                $this->flashSession->error("ERROR:: File extension not allowed");
                return $this->response->redirect($this->router->getControllerName());                    
            }   
            #Get Image Array() into a variable                 
            $myvars[] = $imgName;
        }
            $insert->pimg_front = empty($myvars[0]) ? "empty.png" : $myvars[0];
            $insert->pimg_back = empty($myvars[1]) ? "empty.png" : $myvars[1];
            $insert->pimg_top = empty($myvars[2]) ? "empty.png" : $myvars[2];
            $insert->pimg_left = empty($myvars[3]) ? "empty.png" : $myvars[3];
            $insert->pimg_right = empty($myvars[4]) ? "empty.png" : $myvars[4];
            $insert->pimg_bottom = empty($myvars[5]) ? "empty.png" : $myvars[5];
    }
    else{
            $insert->pimg_front = 'empty.png';
            $insert->pimg_back = 'empty.png';
            $insert->pimg_top = 'empty.png';
            $insert->pimg_left = 'empty.png';
            $insert->pimg_right = 'empty.png';
            $insert->pimg_bottom = 'empty.png';            
    }


    if($insert->save() == true){
        print_r('OK');
    }else{
       print_r('NO');
    }
}

一种理想的解决方案是保持图例选项的颜色,指定大小和文本大小,并在栏顶部启用标签。我正在努力弄清自己是如何完成这些工作的。

2 个答案:

答案 0 :(得分:1)

答案发现here帮我找到一个解决办法。

import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize = (30,25))
vmin = data.column.min()
vmax = data.column.max()
data.plot(ax=ax,column = column,edgecolor='black',cmap = 'YlOrRd',legend = False)
plt.xlim([6,19])
plt.ylim([36,47.7])
plt.xticks([], [])
plt.yticks([], [])

cax = fig.add_axes([1, 0.1, 0.03, 0.8])
sm = plt.cm.ScalarMappable(cmap='YlOrRd', norm=plt.Normalize(vmin=vmin, vmax=vmax))
sm._A = []
cbr = fig.colorbar(sm, cax=cax,)
cbr.ax.tick_params(labelsize=200) 
plt.tight_layout()
plt.savefig(os.path.join('out','fig.png'),format = 'png',bbox_inches='tight')
plt.show()

一旦你的彩条对象my_cbar,则可以设置在matplotlib时尚特性。在这里,我更改了标签尺寸。请记住,使用bbox_inches='tight'如果你需要保存图:否则,彩条不会被保存。 我的输出是这样的,有修改的彩条的中文字体。 map with colorbar

答案 1 :(得分:0)

如何在单独的图形中创建彩条?

使用找到的第一个示例here,您可以创建一个函数:

import matplotlib as mpl
import numpy as np
import matplotlib.pyplot as plt

def create_colourbar(cmap, vmin, vmax, label, save_path=None):
    ''' Creates colourbar in separate figure 
    :param cmap: Cmap string or object
    :param vmin: minimum value in data array
    :param vmax: maximum value in data array
    :param label: colourbar label
    :param save_path: Save path, optional
    '''

    fig, ax = plt.subplots(figsize=(5, 1))

    cb1 = mpl.colorbar.ColorbarBase(cmap=cmap,
                                    norm=Normalize(vmin=vmin,
                                                   vmax=vmax),
                                    orientation='horizontal', ax=ax)
    cb1.set_label(label, fontsize=6)
    plt.tight_layout()
    if save_path:
        plt.savefig(save_path3)
    plt.show()

其中:

vmax = np.nanmax(world['LEADS'].values)
vmin = np.nanmin(world['LEADS'].values)

cmap是一个颜色图字符串或对象。