当前位置:   article > 正文

python 实现双纵轴(y)轴图像的绘制(中文label),解决只显示一个折线label的问题_python 双坐标轴 只显示 一条曲线的label

python 双坐标轴 只显示 一条曲线的label

数据:

原始数据中,分为第0,1,2,3列,这里使用第1(横轴),2列(左纵轴),3列(右纵轴)

200649.735.0229.07
200751.2533.6829.62
200854.7537.8831.39
200953.5736.2129.44
201046.0830.7720.9
201148.3231.2123.03
201252.0631.2824.47
201353.8631.3825.57
201457.133027.08

结果:



import matplotlib.pylab as plt # 导入绘图包
import matplotlib.pyplot as mp
from pylab import * #图像中的title,xlabel,ylabel均使用中文
import numpy as np

#使用自己下载的宋体库simsun.ttc,原始matplotlib不支持中文
myfont = matplotlib.font_manager.FontProperties(fname="simsun.ttc")
mpl.rcParams['axes.unicode_minus'] = False

dates,y1 = np.loadtxt('全国发病数据_可用于分析.csv', delimiter=',', usecols=(0,1), unpack=True)
dates,y2 = np.loadtxt('全国发病数据_可用于分析.csv', delimiter=',', usecols=(0,2), unpack=True)

mp.gcf().set_facecolor(np.ones(3) * 240/255)#设置背景色
fig, ax1 = plt.subplots() # 使用subplots()创建窗口
ax2 = ax1.twinx() # 创建第二个坐标轴
ax1.plot(dates, y1,'o-', c='orangered',label='y1', linewidth = 1) #绘制折线图像1,圆形点,标签,线宽
ax2.plot(dates, y2, 'o-', c='blue',label='y2', linewidth = 1) #同上

ax1.set_xlabel('时间', fontproperties=myfont,size=18) #与原始matplotlib设置参数略有不同,使用自己下载的中文宋体,参数位置不可改变
ax1.set_ylabel('第1列数据', fontproperties=myfont,size=18)
ax2.set_ylabel('第2列数据', fontproperties=myfont,size=18)
mp.gcf().autofmt_xdate()#自动适应刻度线密度,包括x轴,y轴

mp.legend()#显示折线的意义
plt.show()

但是存在问题,只显示了一个label,怎么办?

原因:

应该是legend()默认使用当前界面的label,理论上我们是建立了两个界面的,也就是两个图层,windows系统只标记了上方的图层的label。

改进与解决

fig, ax1 = plt.subplots() 
ax1.plot(dates, y1,'o-', c='orangered',label='cancer viliage num', linewidth = 1) 
mp.legend(loc=2)
ax2 = ax1.twinx() 
ax2.plot(dates, y2, 'o-', c='blue',label='waster water', linewidth = 1)
mp.legend(loc=1)

说明:在mp.legend()中添加了参数loc,而对应值1,2,3,4分别对应图像的右上角,左上角,左下角,右下角


所有改进代码:

import matplotlib.pylab as plt # 导入绘图包
import matplotlib.pyplot as mp
from pylab import * #图像中的title,xlabel,ylabel均使用中文
import numpy as np

#使用自己下载的宋体库simsun.ttc,原始matplotlib不支持中文
myfont = matplotlib.font_manager.FontProperties(fname="simsun.ttc")
mpl.rcParams['axes.unicode_minus'] = False

dates,y1 = np.loadtxt('可用于分析.csv', delimiter=',', usecols=(0,1), unpack=True)
_,y2 = np.loadtxt('可用于分析.csv', delimiter=',', usecols=(0,2), unpack=True)


mp.gcf().set_facecolor(np.ones(3) * 240/255)#设置背景色
fig, ax1 = plt.subplots() # 使用subplots()创建窗口
ax1.plot(dates, y1,'o-', c='orangered',label='y1', linewidth = 1) #绘制折线图像1,圆形点,标签,线宽
mp.legend(loc=2)
ax2 = ax1.twinx() # 创建第二个坐标轴
ax2.plot(dates, y2, 'o-', c='blue',label='y2', linewidth = 1) #同上
mp.legend(loc=1)

ax1.set_xlabel('时间', fontproperties=myfont,size=18)
ax1.set_ylabel('y1', fontproperties=myfont,size=18)
ax2.set_ylabel('y2', fontproperties=myfont,size=18)
mp.gcf().autofmt_xdate()#自动适应刻度线密度,包括x轴,y轴
plt.show()

结果:


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/142350?site
推荐阅读
相关标签
  

闽ICP备14008679号