爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 15382|回复: 6

[求助] 同样代码输出png可以,SVG就出现问题

[复制链接]

新浪微博达人勋

发表于 2020-12-29 23:13:53 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
一个画布上画了6张图等高线图,plt.savefig("./高度场.png")

plt.savefig("./高度场.svg")

png图片是正常的,svg图片地图没有去掉。求助大家什么原因。


密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2020-12-30 08:17:01 | 显示全部楼层

                               
登录/注册后可看大图
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2020-12-30 09:00:20 | 显示全部楼层
楼主可以贴上代码,然后把问题描述清楚……
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-12-30 22:12:29 | 显示全部楼层
MyOpenGFM 发表于 2020-12-30 09:00
楼主可以贴上代码,然后把问题描述清楚……

# -*- coding: utf-8 -*-
"""
读取NC文件,变量有位势高度,U风,V风
"""

import numpy as np
import pandas as pd
import cartopy.crs as ccrs
import cartopy.io.shapereader as shpreader
import cartopy.feature as cfeature
from matplotlib import pyplot as plt
from netCDF4 import Dataset
import matplotlib as mpl
from cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatter
mpl.rcParams['font.sans-serif'] = ['SimHei']   #设置简黑字体
mpl.rcParams['axes.unicode_minus'] = False    #正常显示负号

#-----读取数据
nc_obj2014=Dataset('./data/2014.nc')
nc_obj2015=Dataset('./data/2015.nc')
nc_obj2016=Dataset('./data/2016.nc')
nc_obj2017=Dataset('./data/2017.nc')
nc_obj2018=Dataset('./data/2018.nc')
nc_obj2019=Dataset('./data/2019.nc')

lat   = (nc_obj2014.variables['latitude'][:])
lon   = (nc_obj2014.variables['longitude'][:])
level = (nc_obj2014.variables['level'][:])
lons,lats = np.meshgrid(lon,lat)

time2015 = (nc_obj2015.variables['time'][:])
hgt2014  = (nc_obj2014.variables['z'][:,9,:,:])*0.1
hgt2015  = (nc_obj2015.variables['z'][:,9,:,:])*0.1
hgt2016  = (nc_obj2016.variables['z'][:,9,:,:])*0.1
hgt2017  = (nc_obj2017.variables['z'][:,9,:,:])*0.1
hgt2018  = (nc_obj2018.variables['z'][:,9,:,:])*0.1
hgt2019  = (nc_obj2019.variables['z'][:,9,:,:])*0.1

#----绘图
fontNum=12  
contourline = range(11970,12600,30)
region = [100,120,15,25]

proj=ccrs.PlateCarree()
fig = plt.figure(figsize=(6,6),dpi=600)

#----第一张图
ax1 = fig.add_axes([0.06,0.62,0.45,0.4],
        projection=ccrs.LambertConformal(central_longitude=110.0,
        central_latitude=20,standard_parallels=(15,25)))
ax1.set_extent(region,crs=ccrs.PlateCarree())
ax1.add_feature(cfeature.LAND.with_scale('50m'), facecolor=cfeature.COLORS['land'],alpha=0.5)
ax1.add_feature(cfeature.COASTLINE.with_scale('50m'))
ax1.add_feature(cfeature.STATES.with_scale('50m'))
cs1 = ax1.contour(lons[280:361,160:321],lats[280:361,160:321],hgt2015[10,280:361,160:321],
                  transform=proj,levels=contourline,linewidths=1,colors="k")
cs1.clabel(contourline[0::2],fontsize=fontNum,colors="k",fmt='%.f')
gl = ax1.gridlines(crs=proj,ylocs=np.arange(region[2],region[3]+5,5),
    xlocs=np.arange(region[0],region[1]+5,5),draw_labels=True)
ax1.yaxis.set_ticks_position("right")
#ax1.set_xticks(range(100,120,5),crs=proj)
#ax1.set_yticks(range(15,25,5),crs=proj)
ax1.set_title("201511",fontsize=15)

#----第二张图
ax2 = fig.add_axes([0.52,0.62,0.45,0.4],
        projection=ccrs.LambertConformal(central_longitude=110.0,
        central_latitude=20,standard_parallels=(15,25)))
ax2.set_extent(region,crs=ccrs.PlateCarree())
cs2 = ax2.contour(lons[280:361,160:321],lats[280:361,160:321],hgt2015[11,280:361,160:321],
                  transform=proj,levels=contourline,linewidths=1,colors="k")
cs2.clabel(contourline[0::2],fontsize=fontNum,colors="k",fmt='%.f')
ax2.add_feature(cfeature.LAND.with_scale('50m'), facecolor=cfeature.COLORS['land'],alpha=0.5)
ax2.add_feature(cfeature.COASTLINE.with_scale('50m'))
ax2.add_feature(cfeature.STATES.with_scale('50m'))
gl2 = ax2.gridlines(crs=proj,ylocs=np.arange(region[2],region[3]+5,5),
    xlocs=np.arange(region[0],region[1]+5,5),draw_labels=False)
ax2.set_title("201512",fontsize=15)
#----第三张图
ax3 = fig.add_axes([0.06,0.32,0.45,0.4],
        projection=ccrs.LambertConformal(central_longitude=110.0,
        central_latitude=20,standard_parallels=(15,25)))
ax3.set_extent(region,crs=ccrs.PlateCarree())
cs3 = ax3.contour(lons[280:361,160:321],lats[280:361,160:321],hgt2016[0,280:361,160:321],
                  transform=proj,levels=contourline,linewidths=1,colors="k")
cs3.clabel(contourline[0::2],fontsize=fontNum,colors="k",fmt='%.f')
ax3.add_feature(cfeature.LAND.with_scale('50m'), facecolor=cfeature.COLORS['land'],alpha=0.5)
ax3.add_feature(cfeature.COASTLINE.with_scale('50m'))
ax3.add_feature(cfeature.STATES.with_scale('50m'))
gl3 = ax3.gridlines(crs=proj,ylocs=np.arange(region[2],region[3]+5,5),
    xlocs=np.arange(region[0],region[1]+5,5),draw_labels=False)
ax3.set_title("201601",fontsize=15)
#----第四张图
ax4 = fig.add_axes([0.52,0.32,0.45,0.4],
        projection=ccrs.LambertConformal(central_longitude=110.0,
        central_latitude=20,standard_parallels=(15,25)))
ax4.set_extent(region,crs=ccrs.PlateCarree())
cs4 = ax4.contour(lons[280:361,160:321],lats[280:361,160:321],hgt2016[1,280:361,160:321],
                  transform=proj,levels=contourline,linewidths=1,colors="k")
cs4.clabel(contourline[0::2],fontsize=fontNum,colors="k",fmt='%.f')
ax4.add_feature(cfeature.LAND.with_scale('50m'), facecolor=cfeature.COLORS['land'],alpha=0.5)
ax4.add_feature(cfeature.COASTLINE.with_scale('50m'))
ax4.add_feature(cfeature.STATES.with_scale('50m'))
gl4 = ax4.gridlines(crs=proj,ylocs=np.arange(region[2],region[3]+5,5),
    xlocs=np.arange(region[0],region[1]+5,5),draw_labels=False)
ax4.set_title("201602",fontsize=15)
#----第五张图
ax5 = fig.add_axes([0.06,0.02,0.45,0.4],
        projection=ccrs.LambertConformal(central_longitude=110.0,
        central_latitude=20,standard_parallels=(15,25)))
ax5.set_extent(region,crs=ccrs.PlateCarree())
cs5 = ax5.contour(lons[280:361,160:321],lats[280:361,160:321],hgt2016[2,280:361,160:321],
                  transform=proj,levels=contourline,linewidths=1,colors="k")
cs5.clabel(contourline[0::2],fontsize=fontNum,colors="k",fmt='%.f')
ax5.add_feature(cfeature.LAND.with_scale('50m'), facecolor=cfeature.COLORS['land'],alpha=0.5)
ax5.add_feature(cfeature.COASTLINE.with_scale('50m'))
ax5.add_feature(cfeature.STATES.with_scale('50m'))
gl5 = ax5.gridlines(crs=proj,ylocs=np.arange(region[2],region[3]+5,5),
    xlocs=np.arange(region[0],region[1]+5,5),draw_labels=False)
ax5.set_title("201603",fontsize=15)
#----第六张图
ax6 = fig.add_axes([0.52,0.02,0.45,0.4],
        projection=ccrs.LambertConformal(central_longitude=110.0,
        central_latitude=20,standard_parallels=(15,25)))
ax6.set_extent(region,crs=ccrs.PlateCarree())
cs6 = ax6.contour(lons[280:361,160:321],lats[280:361,160:321],hgt2016[3,280:361,160:321],
                  transform=proj,levels=contourline,linewidths=1,colors="k")
cs6.clabel(contourline[0::2],fontsize=fontNum,colors="k",fmt='%.f')
ax6.add_feature(cfeature.LAND.with_scale('50m'), facecolor=cfeature.COLORS['land'],alpha=0.5)
ax6.add_feature(cfeature.COASTLINE.with_scale('50m'))
ax6.add_feature(cfeature.STATES.with_scale('50m'))
gl6 = ax6.gridlines(crs=proj,ylocs=np.arange(region[2],region[3]+5,5),
    xlocs=np.arange(region[0],region[1]+5,5),draw_labels=False)
ax6.set_title("201604",fontsize=15)

# 加载中国地图
#china = shpreader.Reader('G:/中国地图/maps/bou2_4l.dbf').geometries()
#绘制中国国界省界九段线等等
#ax.add_geometries(china, ccrs.PlateCarree(),facecolor='none', edgecolor='black',zorder = 1)




#---保存
plt.savefig("./高度场Lambert.svg")
plt.savefig("./高度场Lambert.png")
   
print('-------程序结束-----------')


输出的svg图,几个图会出现地图相互覆盖,
输出png就是正常的。

密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2020-12-31 10:06:59 | 显示全部楼层
cyqiankun 发表于 2020-12-30 22:12
# -*- coding: utf-8 -*-
"""
读取NC文件,变量有位势高度,U风,V风

没有楼主的原始数据,精简了代码

import numpy as np
import pandas as pd
import cartopy.crs as ccrs
import cartopy.io.shapereader as shpreader
import cartopy.feature as cfeature
from matplotlib import pyplot as plt
from netCDF4 import Dataset
import matplotlib as mpl
from cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatter
mpl.rcParams['font.sans-serif'] = ['SimHei']   #设置简黑字体
mpl.rcParams['axes.unicode_minus'] = False    #正常显示负号

x = np.linspace(0, 5)
fig = plt.figure(figsize=(6,6),dpi=600)
ax1 = fig.add_axes([0.06,0.62,0.45,0.4])
ax1.plot(np.cos(x))
ax2 = fig.add_axes([0.52,0.62,0.45,0.4])
ax2.plot(np.cos(x))
ax3 = fig.add_axes([0.06,0.32,0.45,0.4])
ax3.plot(np.cos(x))
ax4 = fig.add_axes([0.52,0.32,0.45,0.4])
ax4.plot(np.cos(x))
ax5 = fig.add_axes([0.06,0.02,0.45,0.4])
ax5.plot(np.cos(x))
ax6 = fig.add_axes([0.52,0.02,0.45,0.4])
ax6.plot(np.cos(x))
plt.savefig("./高度场Lambert.svg")
plt.savefig("./高度场Lambert.png")

最后得到的png和svg都是相互覆盖的,楼主需要微调add_axes的rect参数值,调整每个子图的大小,或者尝试用subplot能否满足需求
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2020-12-31 12:48:43 | 显示全部楼层
MyOpenGFM 发表于 2020-12-31 10:06
没有楼主的原始数据,精简了代码

import numpy as np

axes六个图没有重合,使用的地图底图,加载的地图超出了axes的范围,导致所有地图重合,六个子图倒是没有重合。子图或者用subplot比较好调整,但是为什么画的地图超出每个axes的范围,这个搞不懂。
本来上传图片,但是一直上传不上去。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-1-1 10:59:34 | 显示全部楼层
cyqiankun 发表于 2020-12-31 12:48
axes六个图没有重合,使用的地图底图,加载的地图超出了axes的范围,导致所有地图重合,六个子图倒是没有 ...

现在才理解楼主的问题…………
由于条件所限,只能建议楼主用谷歌搜搜答案,放心,你绝对不会是第一个遇到这种问题的学生
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表