- matplotlib
第一个小例子
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-1,1,50)
#y = 2*x +1
y = x**2
plt.plot(x,y)
plt.show()
生成的图片地下,有一溜小图标,每个都可以试试
第二个小例子
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-3,3,50)
y1 = 2*x +1
y2 = x**2
plt.figure() ## 每一张figure的开头
plt.plot(x,y1)
plt.show()
## 先定figure的开头,下面参数都与这张figure相关,直到下一张figure
plt.figure(num=3,figsize=(8,5)) ## 可以指定编号,图片大小
plt.plot(x,y2) ## 画第一条线
plt.plot(x,y1,color='red',linewidth=1.0,linestyle='--')
plt.show()
会出两张图片,第二张如下,画两条线,每条线对应一个plt函数
修改坐标标尺、标签、取值范围等
plt.xlim((-1,2)) ## x轴取值范围
plt.ylim((-2,3)) ## y轴取值范围
plt.xlabel('I am x') ## x轴标签
plt.ylabel('I am y') ## y轴标签
new_ticks = np.linspace(-1,2,5)
plt.xticks(new_ticks) ## x轴刻度
plt.yticks([-2,-1,0,1,3],
[r'$really\ bad$',r'$bad\ \alpha$',r'$normal$',r'$good$',r'$really\ good$'])
## 注:'\'为转译字符,可以转译空格和希腊字母 ,修改字体可以用正则匹配
设置边框,挪动坐标轴
# gca = 'get current axis'
ax = plt.gca() ## 拿到的是四个边框
ax.spines['right'].set_color('none') ## 上、右边框去掉
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom') ## 左、下边框设为y、x轴
ax.yaxis.set_ticks_position('left')
ax.spines['bottom'].set_position(('data',0)) ## 挪动x轴,按照y的值挪动
ax.spines['left'].set_position(('data',0)) ## 挪动y轴,按照x的值挪动
图就变成这样啦 (我觉得比R里面的ggplot2好用)
加个图例
l1,=plt.plot(x,y2,label='up') ## 画第一条线
l2,=plt.plot(x,y1,color='red',linewidth=1.0,linestyle='--',label='down') ## 要加上逗号,否则报错
plt.legend(handles=[l1,l2],labels=["aaa","bbb"],loc='best')
## handles 用来放入legent里的线,label分别给他们命名,需要给plt.plot()返回的对象命名
# loc=best,自己给图例找地方
## 不想麻烦就不用命名,legend用默认值
图例自己找了个地方,在左上角呆着了
在图上加个注解
## 设置要标注的点的坐标
x0 =1
y0 = 2*x0 +1
plt.scatter(x0,y0,s=50,color='b')
plt.plot([x0,x0],[y0,0],'k--',lw=2.5) ## k-- is simple for dark --,lw for linewidth
## 箭头标注点
plt.annotate(r'$2x+1=%s$'% y0,xy=(x0,y0),xycoords='data',xytext=(+30,-30), ## xy的位置基于(x0,y0)点分别+30,-30
textcoords='offset points',fontsize=16,arrowprops=dict(arrowstyle='->', connectionstyle='arc3,rad=.2')) ## 箭头的形状, 箭头的弧度
## 加个文字注释
plt.text(-3.7,3,r'$This\ is\ the\ text.\ \mu\ \sigma_i\ \alpha_t$',
fontdict={'size':16,'color':'r'})
漂亮的注释~~
更多注释相关参数可见:https://blog.csdn.net/leaf_zizi/article/details/82886755
x = np.linspace(-3,3,50)
y1 = 2*x +1
plt.figure(num=1,figsize=(8,5)) ## 可以指定编号,图片大小
plt.plot(x, y1,linewidth=10,zorder=1)
# gca = 'get current axis'
ax = plt.gca() ## 拿到的是四个边框
ax.spines['right'].set_color('none') ## 上、右边框去掉
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom') ## 左、下边框设为y、x轴
ax.yaxis.set_ticks_position('left')
ax.spines['bottom'].set_position(('data',0)) ## 挪动x轴,按照y的值挪动
ax.spines['left'].set_position(('data',0)) ## 挪动y轴,按照x的值挪动
for label in ax.get_xticklabels() + ax.get_yticklabels():
label.set_fontsize(12)
label.set_bbox(dict(facecolor='white',edgecolor='None',alpha=0.7,zorder=2))
plt.show()
希望线无论多款,刻度都不被遮挡
for label in ax.get_xticklabels() + ax.get_yticklabels():
label.set_fontsize(12)
label.set_bbox(dict(facecolor='white',edgecolor='None',alpha=0.7,zorder=2))
## zorder有点像ps中的涂层,需要为线和矿分别设置zorder,并且order大的才能显示出来
给刻度加一个小白框,颜色和背景色一样
线就先捣鼓到这啦~