爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 36824|回复: 10

[求助] python折线图标题文字异常

[复制链接]

新浪微博达人勋

发表于 2021-6-17 07:30:46 | 显示全部楼层 |阅读模式

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

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

x
代码如下:
import pandas as pd
import matplotlib.pyplotas plt
filename=r'd:\admin\Desktop\py\1.xlsx'
df=pd.read_excel(filename)#####读取文件###########
times=df['Hour']#####给每种气象特征量一个列表用以储存数据####
pressures=df['PRS_Sea']#####给每种气象特征量一个列表用以储存数据####
temps=df['TEM']#####给每种气象特征量一个列表用以储存数据####
rhu=df['RHU']#####给每种气象特征量一个列表用以储存数据####
rains=df['PRE_1h']#####给每种气象特征量一个列表用以储存数据####
fig=plt.figure(figsize=(7,4),dpi=200)
ax1=fig.add_subplot(111)
line1,=ax1.plot(times,temps,'r:',lw=1,label='气温')
bar1=ax1.bar(times,rains,color='b',label='降水量')
ax2=ax1.twinx()
line2,=ax2.plot(times,pressures,'k-',lw=1.2,label='气压')
plt.legend((line1,bar1,line2),('气温','降水量','气压'),loc='centerleft',frameon=False,framealpha=0.5)
ax1.set_xlabel('时间 \ h')
ax1.set_ylabel('气温(℃)\降水量(mm)')
ax2.set_ylabel('气压(hPa)')
plt.title("puning")
plt.show()
代码可以出图,但是提示下列错误,标题异常,而且折线图也怪怪的,有两条线,柱状图就正常,请教是什么问题?

错误提示.png
1.png
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2021-6-17 17:22:24 | 显示全部楼层
本帖最后由 Masterpiece 于 2021-6-17 17:25 编辑

第一个问题,关于中文乱码的。
这个楼上解决办法是一种,但是不足之处是这两个参数是全局设置,这会导致数字字体也跟着变化,说实话黑体的数字字体不好看,我更推荐单独设置的方案,比如图例字体的:
  1. import matplotlib as mpl
  2. chinese=mpl.font_manager.FontProperties(fname='C:\Windows\Fonts\simhei.ttf')
  3. ax.legend(prop=chinese)
复制代码
或者坐标轴title的:
  1. ax.set_ylabel('时间',fontdict={'family':'SimHei','size':12,'color':'k'})
复制代码
这样会让图片看好一些,默认的逮虾户字体的数字和英文还是OK的。

第二个问题,这个头尾连接肯定是ax.plot(X,Y)里边的X有问题,我不知道你实际X是啥样的,但是对于matplotlib来说,X可以是接受pandas的datetime时间类,或者python原生datetime时间类。

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

使用道具 举报

新浪微博达人勋

发表于 2021-6-17 07:59:39 | 显示全部楼层
中文字体需要提前设置
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-6-17 08:44:45 | 显示全部楼层
plt.rcParams['font.sans-serif'] = ['SimHei'] #设置字体
plt.rcParams['axes.unicode_minus'] = False  #设置显示负值
常用中文字体有如下:
黑体 SimHei
微软雅黑 Microsoft YaHei
微软正黑体 Microsoft JhengHei
新宋体 NSimSun
新细明体 PMingLiU
细明体 MingLiU
标楷体 DFKai-SB
仿宋 FangSong
楷体 KaiTi
仿宋_GB2312 FangSong_GB2312
楷体_GB2312 KaiTi_GB2312
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-6-17 08:45:40 | 显示全部楼层
  1. plt.rcParams['font.sans-serif'] = ['SimHei']
  2. plt.rcParams['axes.unicode_minus'] = False
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-6-17 08:58:36 | 显示全部楼层

两条直线应该是数据顺序错乱造成,两条直线的两个端点应该是临近的两个数据,而不是分开的。如下图一样连在一起。

微信图片编辑_20210617085507.jpg
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2021-6-17 15:33:55 | 显示全部楼层
dttyz 发表于 2021-6-17 08:44
plt.rcParams['font.sans-serif'] = ['SimHei'] #设置字体
plt.rcParams['axes.unicode_minus'] = False   ...

明白了,谢谢
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2021-6-17 15:43:07 | 显示全部楼层
dttyz 发表于 2021-6-17 08:58
两条直线应该是数据顺序错乱造成,两条直线的两个端点应该是临近的两个数据,而不是分开的。如下图一样连 ...

我一开始是用20-20时来画图就出现这个问题,但是如果用01-24时就可以了,感觉这个跨日有关系,就是不知道怎么改
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2021-6-17 15:45:56 | 显示全部楼层
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2021-6-17 20:41:19 | 显示全部楼层
Masterpiece 发表于 2021-6-17 17:22
第一个问题,关于中文乱码的。
这个楼上解决办法是一种,但是不足之处是这两个参数是全局设置,这会导致数 ...

又学到一招,另外关于第二个问题,是X也就是时间轴的问题,因为用的是20-20的小时数据,导致读着就乱了,气象上这种时次应该如何使用合适呢?
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

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