
书接上回,我们继续聊折线图。
有细心的小伙伴已经注意到了,我们上次画的折线图,y轴单位是Billion:十亿,有点儿不太习惯这种表示方法,而且能改成中文版就好了。
那我们继续优化:
- 去掉科学计数法
- 更改标题
- 更改y轴标签为中文,并添加单位 - 亿,
- x轴标签为中文
先来看一下上次我们画的最终版的折线图

可以看到,由于数字太大,matplotlib已经帮我们自动完成了科学计数法的转换。
那第一步我们来去掉科学计数法:
plt.figure(figsize=(15,8))plt.plot(china_pop_info['Year'], china_pop_info['Population'], label="China")plt.plot(india_pop_info['Year'], india_pop_info['Population'], label="India")plt.legend(fontsize=16)plt.xlabel('Year', fontsize=30)plt.ylabel('Population Number Billion', fontsize=30)plt.title('China VS India', fontsize=40)plt.tick_params(labelsize=15)plt.ticklabel_format(useOffset=False, style='plain') # 去掉默认的科学计数法,改成正常显示plt.show()

好了,y轴的数字是转换成正常的数字了,但是这么大的数字,不易读啊。那我们再转换一次,把值转换成以亿为单位:
plt.figure(figsize=(15,8))plt.plot(china_pop_info['Year'], china_pop_info['Population']/100000000, label="China") # 转换成以亿为单位plt.plot(india_pop_info['Year'], india_pop_info['Population']/100000000, label="India") # 转换成以亿为单位plt.xlabel('Year', fontsize=30)plt.ylabel('Population Number', fontsize=30)plt.title('China VS India Population', fontsize=40)plt.ticklabel_format(useOffset=False, style='plain') # 去掉默认的科学计数法,改成正常显示plt.tick_params(labelsize=15)plt.show()

现在看起来舒服多了。
有小伙伴说改成中文呢!那我们来试试
plt.figure(figsize=(15,8))plt.plot(china_pop_info['Year'], china_pop_info['Population']/100000000, label="China") # 转换成以亿为单位plt.plot(india_pop_info['Year'], india_pop_info['Population']/100000000, label="India") # 转换成以亿为单位plt.legend()plt.xlabel('年份', fontsize=30) # x轴标签改成中文plt.ylabel('人口总数 亿', fontsize=30) # y轴标签改成中文plt.title('中国 vs 印度历年人口趋势图', fontsize=40) # 标题改成中文plt.ticklabel_format(useOffset=False, style='plain') # 去掉默认的科学计数法,改成正常显示plt.tick_params(labelsize=15)plt.show()

结果发现生成的图上中文无法正常显示。想要正常显示中文,需要添加下面1~3行代码
import matplotlib as mplmpl.rcParams['font.family'] = 'SimHei' #设置中文字体plt.rcParams['axes.unicode_minus'] = False #设置支持中文字符集plt.figure(figsize=(15,8)) # 调整画布大小plt.plot(china_pop_info['Year'], china_pop_info['Population']/100000000, label="China") # 转换成以亿为单位plt.plot(india_pop_info['Year'], india_pop_info['Population']/100000000, label="India") # 转换成以亿为单位plt.plot(usa_pop_info['Year'], usa_pop_info['Population']/100000000, label="USA") # 转换成以亿为单位plt.legend() # 显示图例plt.xlabel('年份', fontsize=30) # 设置x轴标签,字体大小为30plt.ylabel('人口总数 亿', fontsize=30) # 设置y轴标签,字体大小为30plt.title('中国 vs 印度 vs 美帝历年人口趋势图', fontsize=40) # 设置图片标题,字体大小为40plt.ticklabel_format(useOffset=False, style='plain') # 去掉默认的科学计数法,改成正常显示plt.tick_params(labelsize=15)plt.show() # 显示画图结果

嗯~~~
又有小伙伴提需求了,问:
线条格式想改成虚线该怎么画?
很简单,只需要在画图的时候,添加一个linestyle的参数就可以了
plt.figure(figsize=(15,8))plt.plot(china_pop_info['Year'], china_pop_info['Population']/100000000, label="China", linestyle='--') # 折线显示方式plt.plot(india_pop_info['Year'], india_pop_info['Population']/100000000, label="India", linestyle='--') # 折线显示方式plt.legend()plt.xlabel('年份', fontsize=30) # x轴标签改成中文plt.ylabel('人口总数 / 亿', fontsize=30) # y轴标签改成中文plt.title('中国 vs 印度历年人口趋势图', fontsize=40) # 标题改成中文plt.ticklabel_format(useOffset=False, style='plain') # 去掉默认的科学计数法,改成正常显示plt.tick_params(labelsize=15)plt.show()

linestyle这个参数常用的有两种表示方式:
1. 字符串表示:"solid", "dotted", "dashed" or "dashdot" 或者字符: "-", "--", ".", "-."
2. 元组表示:详见官网文档
https://matplotlib.org/stable/gallery/lines_bars_and_markers/linestyles.html
还有小伙伴问:
折线图上标记拐点如何实现?
再多添加一个参数:marker,有很多值可供选择,详见官方文档:
https://matplotlib.org/stable/api/markers_api.html#module-matplotlib.markers
plt.figure(figsize=(15,8))plt.plot(china_pop_info['Year'], china_pop_info['Population']/100000000, label="China", linestyle='dashed', marker='o') # 添加折线图拐点标记plt.plot(india_pop_info['Year'], india_pop_info['Population']/100000000, label="India", linestyle='--', marker='*') # 添加折线图拐点标记plt.legend()plt.xlabel('年份', fontsize=30) # x轴标签改成中文plt.ylabel('人口总数 / 亿', fontsize=30) # y轴标签改成中文plt.title('中国 vs 印度历年人口趋势图', fontsize=40) # 标题改成中文plt.ticklabel_format(useOffset=False, style='plain') # 去掉默认的科学计数法,改成正常显示plt.tick_params(labelsize=15)plt.show()

好了,今天就先改到这里吧!有关折线图,如果还有其它想要知道的,点击关注本公众号,后台留言,我会尽快给大家回复。
👇




