思考题
- primitives 和 container的区别和联系是什么?
primitives基本元素是容器中包含的元素,container是容器用来盛放primitives基本元素。
primitives中包含要绘制的基本元素:曲线、矩阵、图像、多边形、集合等;
container中包含了很多primitives基本元素,但同时也有自己的属性,是绘制的基础框架
- 四个容器的联系和区别是么?他们分别控制一张图表的哪些要素?
四个对象容器分别为Figure容器,Axes容器,Axis容器,Tick容器。
按照管理范围的关系:Figure > Axes > Axis > Tick
Figrue:是Artist最顶层的container-对象容器,包含了图表中的所有元素;
Axes:大量用于绘图的Artist存放在它内部,是matplotlib的核心;
Axis容器:管理坐标轴;
Tick容器: 最末端的容器对象,包含tick、grid line实例以及对应的label;
绘图题
# 数据导入代码
# 导入包
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
# 导入数据集并转成方便作图的格式
Dataset = pd.read_csv('data/Drugs.csv')
print(Dataset.head())
group = Dataset.groupby(['YYYY', 'State']).agg('sum').reset_index()
print(group.head())
df = group.pivot(index='YYYY', columns='State', values='DrugReports').reset_index()
print(df.head())
YYYY State COUNTY SubstanceName DrugReports
0 2010 VA ACCOMACK Propoxyphene 1
1 2010 OH ADAMS Morphine 9
2 2010 PA ADAMS Methadone 2
3 2010 VA ALEXANDRIA CITY Heroin 5
4 2010 PA ALLEGHENY Hydromorphone 5
YYYY State DrugReports
0 2010 KY 10453
1 2010 OH 19707
2 2010 PA 19814
3 2010 VA 8685
4 2010 WV 2890
State YYYY KY OH PA VA WV
0 2010 10453 19707 19814 8685 2890
1 2011 10289 20330 19987 6749 3271
2 2012 10722 23145 19959 7831 3376
3 2013 11148 26846 20409 11675 4046
4 2014 11081 30860 24904 9037 3280
from matplotlib.lines import Line2D
fig = plt.figure(figsize=(10,8))
ax = fig.add_subplot(111)
ax.patch.set_facecolor('#E9E9F1')
ax.plot(df.YYYY,df.KY,color='gray',linewidth=0.5)
ax.text(df.YYYY.values[-1],df.KY.values[-1],'KY',fontsize=8,color='gray')
ax.plot(df.YYYY,df.OH,color='gray',linewidth=0.5)
ax.text(df.YYYY.values[-1],df.OH.values[-1],'OH',fontsize=8,color='gray')
ax.plot(df.YYYY,df.PA,color='orange',linewidth=2)
ax.text(df.YYYY.values[-1],df.PA.values[-1],'PA',fontsize=8,color='orange')
ax.plot(df.YYYY,df.VA,color='gray',linewidth=0.5)
ax.text(df.YYYY.values[-1],df.VA.values[-1],'VA',fontsize=8,color='gray')
ax.plot(df.YYYY,df.WV,color='gray',linewidth=0.5)
ax.text(df.YYYY.values[-1],df.WV.values[-1],'WV',fontsize=8,color='gray')
ax.grid(color='#FFFFFF')
ax.spines['right'].set_visible(False)
ax.spines['bottom'].set_visible(False)
ax.spines['top'].set_visible(False)
ax.spines['left'].set_visible(False)
ax.tick_params(bottom=False,right=False,left=False)
ax.set_xlabel("Year")
ax.set_ylabel("DrugReports")
ax.text(2009.7,49000,'Evolution of PA vs other states',color='orange',fontsize=8)
plt.show()
fig = plt.figure()
ax1 = fig.add_subplot(1,1,1)
x = np.linspace(0,10,1000)
y = -(x-2)*(x-8)+10
ax1.set_xlim(-0.5,10.5)
ax1.set_ylim(0,20.0)
ax1.plot(x,y,color='red',linewidth=2)
x2 = np.linspace(2,9,1000)
y2 = -(x2-2)*(x2-8)+10
ax1.fill_between(x2,0,y2,facecolor='#D3D3D3')
<matplotlib.collections.PolyCollection at 0x7ffb1cb785e0>
fig = plt.figure()
ax1 = fig.add_subplot(1,1,1)
x = np.linspace(0,10,1000)
y = -(x-2)*(x-8)+10
ax1.set_xlim(-0.5,10.5)
ax1.set_ylim(0,20.0)
ax1.plot(x,y,color='red',linewidth=2)
for i in np.arange(2,9,0.2):
rect = plt.Rectangle((i,0),0.1,-(i-2)*(i-8)+10)
rect.set_color('#D3D3D3')
ax1.add_patch(rect)