一 概述
1.matplotlib的基本绘制步骤
显示绘画步骤
- 找一张纸或者一块画布;
- 调色等一系列前戏;
- 作画。
Matplotlib对应的三个基本的模块
- FigureCanvas
- Renderer
- Artist
2.Artist的分类
Artist分为primitives
和containers两个类型。
primitives为基本元素,像我们图像中的线条,矩形等。
containers为容器,是用来装基本元素的地方,包括图形figure、坐标系Axes和坐标轴Axis。他们之间的关系如下图所示:
二 基本元素--primitives
1.2D-linse
2.patches
- Rectangle-矩形
- Polygon-多边形
- Wedge-契形
3. collections
4.images
三 对象容器--Object container
- Figure容器
- Axis容器
- Axes容器
- Tick容器
四 思考题
1.primitives 和 container的区别和联系是什么,分别用于控制可视化图表中的哪些要素?
primitives是具体画布中的某一个元素,像线条、矩形之列,是具体的图像。而container就是展示图像的地方,可以控制坐标轴,图像背景色,图像的显示等。两者相互配合可以使可视化的结果更易理解。
2.使用提供的drug数据集,对第一列yyyy和第二列state分组求和,画出下面折线图。PA加粗标黄,其他为灰色。
图标题和横纵坐标轴标题,以及线的文本暂不做要求。
data = pd.read_csv('../六月matplotlib-main/data/Drugs.csv')
data1 = data.groupby(['YYYY','State'])['DrugReports'].sum()
y1 = [data1[2010]['KY'],data1[2011]['KY'],data1[2012]['KY'],data1[2013]['KY'],data1[2014]['KY'],data1[2015]['KY'],data1[2016]['KY'],data1[2017]['KY']]
y2 = [data1[2010]['OH'],data1[2011]['OH'],data1[2012]['OH'],data1[2013]['OH'],data1[2014]['OH'],data1[2015]['OH'],data1[2016]['OH'],data1[2017]['OH']]
y3 = [data1[2010]['PA'],data1[2011]['PA'],data1[2012]['PA'],data1[2013]['PA'],data1[2014]['PA'],data1[2015]['PA'],data1[2016]['PA'],data1[2017]['PA']]
y4 = [data1[2010]['VA'],data1[2011]['VA'],data1[2012]['VA'],data1[2013]['VA'],data1[2014]['VA'],data1[2015]['VA'],data1[2016]['VA'],data1[2017]['VA']]
y5 = [data1[2010]['WV'],data1[2011]['WV'],data1[2012]['WV'],data1[2013]['WV'],data1[2014]['WV'],data1[2015]['WV'],data1[2016]['WV'],data1[2017]['WV']]
plt.figure(figsize=(10,8))
plt.plot(x1,y1,color='grey')
plt.plot(x1,y2,color='grey')
plt.plot(x1,y3,color='y',linewidth=5)
plt.plot(x1,y4,color='grey')
plt.plot(x1,y5,color='grey')
plt.grid()
plt.xlabel('Year')
plt.ylabel('DrugReports')
plt.show()
3.分别用一组长方形柱和填充面积的方式模仿画出下图,函数 y = -1 * (x - 2) * (x - 8) +10 在区间[2,9]的积分面积。
x = np.linspace(0.5, 9.5, 1000)
y = -1*(x-2)*(x-8)+10
x1 = np.linspace(2,9,50)
y1 = -1*(x1-2)*(x1-8)+10
fig = plt.figure()
ax = fig.add_subplot(111)
ax.set_xlim(-0.5,10.5)
ax.set_ylim(0,20)
plt.plot(x, y, color = "r", alpha = 0.3,linewidth=3);
plt.bar(x1,y1,width=0.1,color='grey',alpha=0.5);
x = np.linspace(0.5, 9.5, 1000)
y = -1*(x-2)*(x-8)+10
x2 = np.linspace(2, 9, 1000)
y2 = -1*(x2-2)*(x2-8)+10
y2[0] = 0
y2[-1] = 0
fig = plt.figure()
ax = fig.add_subplot(111)
ax.set_xlim(-0.5,10.5)
ax.set_ylim(0,20)
plt.plot(x, y, color = "r", alpha = 0.3,linewidth=3);
plt.fill(x2,y2,color='grey',alpha=0.2);