我要在创建的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');
}
}
一种理想的解决方案是保持图例选项的颜色,指定大小和文本大小,并在栏顶部启用标签。我正在努力弄清自己是如何完成这些工作的。
答案 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'
如果你需要保存图:否则,彩条不会被保存。
我的输出是这样的,有修改的彩条的中文字体。
答案 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
是一个颜色图字符串或对象。