python-绘图matplotlib
《Python编程:从入门到实践》读书笔记
1.使用plot()绘制简单的折线图
import matplotlib.pyplot as plt va=[1,2,3,4,5] sq=[1,4,9,16,25] plt.plot(va,sq,linewidth=1) plt.title("square",fontsize=24) plt.xlabel("value",fontsize=14) plt.ylabel("square of value",fontsize=14) plt.tick_params(axis='both',labelsize=14)#设置刻度的样式,并设置标度字体大小。 plt.show()
//其中包括加title,加坐标描述,设置线段粗细,xy坐标轴均有数据,
运行结果:
2.使用scatter()绘制散点图
import matplotlib.pyplot as plt #plt.scatter(2,4,s=20)#s设置点的尺寸大小 xv=[1,2,3,4,5] yv=[1,4,9,16,25] plt.scatter(xv,yv)#将两个列表作为参数 plt.title("Square") plt.xlabel("number") plt.ylabel("square") plt.tick_params(axis="both",which="major") plt.show()
运行结果:
对以上进行了改进,对横轴、纵轴的数据使用自动计算的方式:
import matplotlib.pyplot as plt #plt.scatter(2,4,s=20)#s设置点的尺寸szie大小 #使用代码计算数据 xv=list(range(1,1001)) yv=[x**2 for x in xv] plt.scatter(xv,yv,s=10) plt.title("Square") plt.xlabel("number") plt.ylabel("square") plt.tick_params(axis="both",which="major") plt.show()
运行结果:(y轴挤不见了)
对散点图中各个点的操作:
plt.scatter(xv,yv,c='red',edgecolor='none',s=10) plt.scatter(xv,yv,c=(0,0,0.9),edgecolor='none',s=10)
1.其中edgecolor是防止点之间的粘连,设置为none,
2. 设置点的颜色有两种方法:直接给c赋值颜色;给c传入一个rgb列表,值都在0-1之间。值越小 颜色越深。
有趣的点来了:
使用颜色映射,可以突出数据的规律,比如让较浅颜色显示较小值,较深颜色显示较大值:
import matplotlib.pyplot as plt #使用代码计算数据 xv=list(range(1,1001)) yv=[x**2 for x in xv] plt.scatter(xv,yv,c=yv,cmap=plt.cm.Blues,s=10)
其中:c直接赋值为y轴的值, cmap告诉pyplot使用哪个颜色映射:
3.画出随机漫步图表
piandao.py:
from random import choice class RandNum(): def __init__(self,ct=5000): self.ct=ct self.xv=[0]#这里一定不能初始化为[],不然在下面函数的while循环里,Append就会报错,因为 self.yv=[0]#一开始这两个列表都为空。 def rd(self): """"选择方向""" while len(self.xv)<self.ct: xdir=choice([-1,1])#choice函数会从list中选择一个数 xdis=choice([0,1,3,2,4]) x=xdir*xdis ydir=choice([-1,1]) ydis=choice([0,1,2,3,4]) y=ydir*ydis if x==0 and y==0:#不允许踏步不前 continue # self.xv.append(self.xv[-1] + x) # self.yv.append(self.yv[-1] + y) xnext=self.xv[-1] + x ynext=self.yv[-1] + y self.xv.append(xnext) self.yv.append(ynext)
给出了rd函数,产生随机数对,放入坐标数据列表中。
调用的代码:
import matplotlib.pyplot as plt from piandao import RandNum #这里是from...import... 并且不需要加.py后缀 while True: rd = RandNum() rd.rd() # 画图: ptn=list(range(rd.ct))#给出列表,作为颜色变化。 plt.scatter(rd.xv, rd.yv,c=ptn,cmap=plt.cm.Blues) plt.scatter(0,0,c='red')#重新画出起点和终点 plt.scatter(rd.xv[-1],rd.yv[-1],c='green') plt.axes().get_xaxis().set_visible(False)#设置坐标轴不显示 plt.axes().get_yaxis().set_visible(False) plt.show() whe=input("continue?")#通过while循环让用户控制是否结束 if whe=='y': break
运行结果: