matplotlib学习笔记
data-visualization
1.matplotlib学习之基本使用
1.1figure学习
import matplotlib.pyplot as plt #导入包
import numpy as np
x=np.linspace(-3,3,50) #产生-3到3之间50个点
y1=2*x+1 #定义函数
y2=x**2
#同时显示多张图时,在每一句 plt.plot(x,y) 前边添加 plt.figure() ,就可以画出多张图
plt.figure()
plt.plot(x,y1) # 绘制直线
plt.figure(num=3,figsize=(8,5)) 如果上述figure函数的参数为空,即plt.figure(),那么图片名字默认为1,2,3...指定了num=3 or 其他数值后,图片编号为指定的编号;figsize,图片长和宽。
# 红色虚线直线宽度默认1.0(线的样式)
plt.plot(x,y1,color='red',linewidth=1.0,linestyle='--')
1.2设置坐标轴
plt.xlim((-1,2)) #设置x轴范围
plt.ylim((-2,3)) #设置轴y范围
#设置坐标轴含义, 注:英文直接写,中文需要后面加上fontproperties属性
plt.xlabel('价格',fontproperties='SimHei')
设置对应坐标用汉字或英文表示,后面的属性fontproperties表示中文可见,不乱码,内部英文$$表示将英文括起来,r表示正则匹配,通过这个方式将其变为好看的字体。如果要显示特殊字符,比如阿尔法,则用转意符\alpha,前面的\ 表示空格转意.
new_ticks=np.linspace(-1,2,5) # 设置x轴刻度
plt.xticks(new_ticks)
设置边框/坐标轴
ax=plt.gca() #gca=get current axis/获取当前轴线
ax.spines['right'].set_color('none') #spines就是脊梁,即四个边框
ax.spines['top'].set_color('none') #取消右边与上边轴
matlibplot并没有设置默认的x轴与y轴方向,下面就开始设置默认轴
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
实现将(0,-1)设为坐标原点
ax.spines['bottom'].set_position(('data',-1))
ax.spines['left'].set_position(('data',0))
1.3图例
l1,=plt.plot(x,y2)
plt.legend(handles=[l1,l2],prop={'family':'SimHei','size':15},loc='lower right',labels=['直线','曲线'])
prop={'family':'SimHei','size':15}:显示中文
legend(hadles=[,,],labels=[,,],loc='best/upper right/upper left/.../lower right')
handles就是你给他添加legend的线,如果要用handles,则前面的plt.plot,必须用l1,形式(不要忘记逗号)
此处labels会覆盖上述的plt.plot()的label
loc默认是best,给你放在一个合适的位置上,如果你拉伸弹框,位置会跟着变,自动放置合适位置
1.4 Annotation标注
绘制特定散点
x0=1
y0=2*x0+1
# plot散点图,上述plt.plot(x,y)变为plt.scatter(x,y)绘制出来就是散点图
# s代表大小,b代表blue
plt.scatter(x0,y0,s=50,color='b')
# 绘制(x0,y0)垂直于x轴的线
# k--表示黑色虚线,k代表黑色,--表示虚线,lw表示线宽
plt.plot([x0,x0],[0,y0],'k--',lw=2.5)
#xy就是需要进行注释的点的横纵坐标;
#xycoords = 'data'说明的是要注释点的xy的坐标是以横纵坐标轴为基准的;
#xytext=(+30,-30)和textcoords='data'说明了这里的文字是基于标注的点的x坐标的偏移+30以及标注点y坐标-30位置,就是我们要进行注释文字的位置;
#fontsize = 16就说明字体的大小;
#arrowprops = dict()这个是对于这个箭头的描述,arrowstyle='->'这个是箭头的类型,connectionstyle="arc3,rad=.2"这两个是描述我们的箭头的弧度以及角度的。
plt.annotate(r'$2x+1=%s$'%y0,xy=(x0,y0),xycoords='data',xytext=(+30,-30),textcoords='offset points',fontsize=16,arrowprops=dict(arrowstyle='->',connectionstyle='arc3,rad=.2'))
# 其中-3.7, 3,是选取text的位置, 空格需要用到转字符\ ,fontdict设置文本字体.
plt.text(-3.7,3,r'$T3his\ is\ the\ some\ text.\mu\ \sigma_i\ \alpha_t$',
fontdict={'size':'16','color':'red'})
1.5tick能见度
对被遮挡的图像调节相关透明度,本例中设置 x轴 和 y轴 的刻度数字进行透明度设置
其中label.set_fontsize(12)重新调节字体大小
facecolor调节 box 前景色,edgecolor 设置边框, 本处设置边框为无,alpha设置透明度.
for label in ax.get_xticklabels()+ax.get_yticklabels():
label.set_fontsize(12)
label.set_bbox(dict(facecolor='white',edgecolor='none',alpha=0.7))
1.6Figures and Subplots(图和子图)
fig = plt.figure()
我们不能在一个空白的figure上绘图,必须要创建一个或更多的subplots(子图
ax1 = fig.add_subplot(2, 2, 1))#figure是2x2(这样一共有4幅图),而且我们选中4个subplots(数字从1到4)中的第1个
#如果输入plt.plot([1.5, 3.5, -2, 1.6])这样的命令,matplotlib会把图画在最后一个figure的最后一个子图上。
f, axes = plt.subplots(2, 3) #创建6个子图
plt.subplots_adjust(wspace=0, hspace=0)# wspace和hspace控制figure宽度和长度的百分比,可以用来控制subplot之间的间隔
为了改变x-axis tick(x轴标记),使用set_xticks和set_xticklabels。前者告诉matplotlib沿着x轴的范围,把标记放在哪里;默认会把所在位置作为标签,但我们可以用set_xticklabels来设置任意值作为标签:
ticks = ax.set_xticks([0, 250, 500, 750, 1000])
labels = ax.set_xticklabels(['one', 'two', 'three', 'four', 'five'],rotation=30, fontsize='small') # rotation选项让x轴上的标记标签有一个30度的旋转
ax.set_title('My first matplotlib plot') #set_title给subplot一个标题
1.7Saving Plots to File(把图保存为文件)
保存一个SVG类型的图片
dpi:控制每英寸长度上的分辨率
bbox_inches, 能删除figure周围的空白部分
plt.savefig('figpath.png', dpi=400, bbox_inches='tight')
2.Seaborn
有五种seaborn的风格,它们分别是:darkgrid, whitegrid, dark, white, ticks。它们各自适合不同的应用和个人喜好。默认的主题是darkgrid。
import seaborn as sns
sns.set(style="ticks")
seaborn内置了不少样例数据,为dataframe类型, df = sns.load_dataset("anscombe")即读取“anscombe”样例数据,如果要查看数据,可以使用类似df.head()命令查看
df = sns.load_dataset("anscombe")
df.head()
relplot() 关系类图表的接口,其实是下面两种图的集成,通过指定kind参数可以画出下面的两种图
scatterplot() 散点图
lineplot() 折线图
Categorical plots 分类图表
catplot() 分类图表的接口,其实是下面八种图表的集成,,通过指定kind参数可以画出下面的八种图
stripplot() 分类散点图
swarmplot() 能够显示分布密度的分类散点图
boxplot() 箱图
violinplot() 小提琴图
boxenplot() 增强箱图
pointplot() 点图
barplot() 条形图
countplot() 计数图
Distribution plot 分布图
jointplot() 双变量关系图
pairplot() 变量关系组图
distplot() 直方图,质量估计图
kdeplot() 核函数密度估计图
rugplot() 将数组中的数据点绘制为轴上的数据
Regression plots 回归图
lmplot() 回归模型图
regplot() 线性回归图
residplot() 线性回归残差图
Matrix plots 矩阵图
heatmap() 热力图
clustermap() 聚集图