本节提要:折线图进阶、散点图
一、复习回顾
三、四两章已经将折线图的基础参数讲解完了,前面几章内容主要的是:
1、figure中的figsize(控制画布大小)、dpi(图像解析度),在figure上添加子图
2、折线图plot中的lw(线宽)、ls(线条样式)、alpha(透明度)、marker(标记样式)。开启网格线命令grid,使用字典的方式调节标题、坐标名大小颜色fontdict、在图形上添加图例 legend。
3、在一张子图中共用某条坐标轴、在两张子图中共用某条坐标轴。
二、折线图进阶
现在以一张虚构数据的墒情图来细讲折线图较少见的参数。
首先能看出的是折线图的背景色发生了变化,如何调节背景色:
代码语言:javascript复制ax1=fig.add_subplot(111,facecolor='papayawhip')
在引入子图时,在subplot命令中添加facecolor一句,引号中是调节颜色名,比如修改为green:
代码语言:javascript复制ax1=fig.add_subplot(111,facecolor='green')
(吐了)在画图时,一定要考虑到配色方案给人的视觉感受。
在共享x轴时,两边y轴的零刻度是不一致的,这要结合你分析的数据及时改变,其命令如下:
代码语言:javascript复制ax1.set_ylim(-1,5.5)
ax2.set_ylim(5,30)
xlim和ylim是用来设置坐标轴的范围的。在分析的这三十天气温时,因为没有任何一天低于10摄氏度,那为什么不将右边刻度从10开始设置呢?不信可修改来具体分析:
咋一看似乎还行,但是在气温折线刚开始的时候有一部分是比较低的,绘制图像的人当然知道气温其实都在10摄氏度以上,不过当别人读取图像时,第一感觉会参照左边的刻度,这样会使阅读者产生前几天气温比较低(在零下)的感觉,所以制图时应该兼顾多方面,以给阅读者最良好的体验(包括前面提到的配色问题)。
和上个教程的体系相比,y轴上在主刻度的基础上出现了副刻度。在引入库包阶段输入:
代码语言:javascript复制import matplotlib.ticker as ticker
引入这个工具,在设定刻度阶段输入:
代码语言:javascript复制ax1.yaxis.set_minor_locator(ticker.MultipleLocator(0.1))
minor即是次要的意思。此处设定副刻度为0.1单位,还可以修改为0.001个单位。
左侧y轴副刻度0.1单位
左侧y轴副刻度0.01单位
看起来好像副刻度消失了,其实是因为过于密集导致生成了黑线。
同样的,主刻度也能修改,将minor换为major即可:
代码语言:javascript复制ax2.yaxis.set_major_locator(ticker.MultipleLocator(10))
现在将右侧主刻度设置为每10个单位显示:
在上面这幅图中,图例legend中的蒸发图例好像多出来一行,没有对齐(强迫症不爽),可通过参数ncol进行修改,ncol表示图例的列数:
代码语言:javascript复制plt.legend((bar1,bar2,line1,line2),('降水','蒸发','墒情','气温'),loc=2,frameon=False,framealpha=0.5,ncol=1)
plt.legend((bar1,bar2,line1,line2),('降水','蒸发','墒情','气温'),loc=2,frameon=False,framealpha=0.5,ncol=4)
第一张图ncol=1,表示图例只有一列;第二张图ncol=4,表示图例有四列。
三、散点图基础
散点图也是经常使用的一类图表,其主体结构语句为:
代码语言:javascript复制plt.scatter(x,y,s,color='',cmap='',marker='',alpha='')
其中,(x,y)是其在坐标中的位置,s表示打点的大小,color表示打点的颜色,cmap表示颜色映射表,marker表示打点的标记,alpha修改透明度,整体上来说和折线图的用法类似。
以一个例子简要展示:
代码语言:javascript复制######引入库包############
import matplotlib.pyplot as plt
import numpy as np
#######拟造数据#############
x=np.linspace(0.05,10,1000)
y=np.random.rand(1000)
#######画布与绘图区#####
fig=plt.figure(figsize=(3,3),dpi=200)
ax=fig.add_subplot(111)
ax.scatter(x,y,s=10,)
plt.show()
下面是修改某些参数:
当然,散点图除了绘制回归曲线,还能有更多的用途,比如在地图上标记地点:
代码语言:javascript复制nameandstation={"恩施":[109.5,30.2],"利川":[109,30.3],"巴东":[110.34,31.04],"建始":[109.72,30.6],"宣恩":[109.49,29.987],"来凤":[109.407,29.493],"咸丰":[109.14,29.665],"鹤峰":[110.034,29.89]}
for key,value in nameandstation.items():
ax.scatter(value[0] , value[1] , marker='.' , s=60 , color = "k" , zorder = 3)
ax.text(value[0]-0.07 , value[1] 0.03 , key , fontsize = 7 , color = "k")
还可以绘制更加酷炫然而没多大用处的图: