前言
本文实现的功能:
- 多子图的画法
- 设置坐标范围
- 设置坐标的显示间隔
- 设置figure的大标题
- 设置x轴和y轴的名称
▲ 数据样式
from matplotlib.pyplot import MultipleLocator
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
data = pd.read_csv('Drugs.csv')
df = pd.DataFrame(data)
# 以'YYYY'和'State'对'DrugReports'进行统计
reports = df.groupby(['YYYY', 'State'])['DrugReports'].sum().unstack('State') # 以‘State’列为目标消除堆叠
max_y = reports.max().max() #子图中纵坐标最大值
min_y = reports.min().min() #子图中纵坐标最小值
max_x = reports.idxmax().max()#子图中横坐标最大值
min_x = reports.idxmin().min()#子图中横坐标最小值
# 获取'State'的值['KY', 'OH', 'PA', 'VA', 'WV']
value_State = reports.columns
# 画图
# 标题颜色样式
colors = plt.get_cmap('tab10')
plt.figure(figsize=(20,10))
x_major_location = MultipleLocator(100) #将横坐标宽度设为10
y_major_location = MultipleLocator(1000) #将纵坐标宽度设为10
for i, value in enumerate(value_State):
x = reports.index
y = reports[value]
plt.subplot(2,3,i+1) # 记得是i+1,因为子图的下标是从1开始的。
plt.plot(x,y,color=colors(i))
plt.fill_between(x,y,facecolor='skyblue',alpha=0.4)
plt.title(value,loc='right',color=colors(i))
# 修改每个子图的刻度宽度
axis = plt.gca() # 获取当前axis
ax.xaxis.set_major_locator(x_major_location)
ax.yaxis.set_major_locator(y_major_location )
# 设置每个子图的刻度总范围
plt.xlim(min_x,max_x)
plt.ylim(min_y,max_y)
plt.grid()
# 给figure加横纵轴的名称,范围在[0,1]之间
plt.figtext(0.5, 0.05, 'Year', fontsize=15)
plt.figtext(0.05, 0.5, 'DrugReports', va='center', rotation='vertical',fontsize=15)
# figure的标题
plt.suptitle('DrugReport of each state every year', fontsize=20)
plt.show()