1.案例1--figure布局,axes区域规划,标题与文字标注等面向对象式编程
(1)程序中尽量采用matplotlib中figure,axes等面向对象编程命令,少用pyplot api命令;
(2)个人绘图的思路是由大到小,先是figure对象布局, 接着是axes对象规划,包括axes区域(如背景颜色,栅格,图例), 图形(如点线柱饼)等,三是axis对象,包括坐标轴,刻度线,标签等(本次案例未体现) ,最后是文字信息,包括标题,数据标注,其他文字说明等。当然数据清洗与准备必须在绘图前完成,以上是个人一些观点,较为简单,望指教!!
import matplotlib.pyplot as plt
import random
#生成数据
x=[x for x in range(1,11)]
y1=[]
for i in range(10):y1.append(random.randint(10,40))
y2=[]
for i in range(10):y2.append(random.randint(10,40))
#显示中文
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
#图片布局
fig,(ax1,ax2)=plt.subplots(2,1,sharex=True)
fig.set_figheight(4)
fig.set_figwidth(6)
#绘制图ax1
plt.sca(ax1) #选定ax1
ax1.plot(x,y1,label='y1销售金额',c='r',ls='--',lw=2,marker='o',mec='b',ms=4)
ax1.patch.set_facecolor("gray") #设置ax1区域背景颜色
ax1.patch.set_alpha(0.5) #设置ax1区域背景颜色透明度
ax1.grid() #打开网格
ax1.legend(loc='best',fontsize=9,frameon=False) #图例设置
#ax1标题与标注
ax1.set_title("y1销售趋势图",fontsize=11) #设置标题
for xy1 in zip(x, y1): #标注数据
plt.annotate("%s" % xy1[1], xy=xy1, xytext=(-5, 5), textcoords='offset points',color='b')
#绘制图ax2
plt.sca(ax2)
ax2.patch.set_facecolor("yellowgreen")
ax2.patch.set_alpha(0.5)
ax2.plot(x,y2,label='y2销售金额',c='b',ls='--',lw=2,marker='o',mec='orange',ms=4)
ax2.legend(loc='best',fontsize=9,frameon=False)
#ax2标题与标注
ax2.set_title("y2销售趋势图",fontsize=11)
for xy2 in zip(x, y2):
plt.annotate("%s" % xy2[1], xy=xy2, xytext=(-5, 5), textcoords='offset points',color='r')
#调整字图间距离
plt.subplots_adjust(0.1,0.2)
#显示图像
plt.show()
2.案例2-- axis(坐标轴)与tick(刻度)面向对象式编程
(1)绘制日销售业绩趋势图,X坐标轴相应设置为日期格式
(2)去除掉图形的脊柱线,只保留X坐标轴
###########第一部分:读取数据##############
import sys
sys.path.append(r"E:\python\project\python可视化\eda可视化项目\数据清洗与描述")
import data_and_clear
from datetime import datetime
df=data_and_clear.yd_department_day_sold()
#x轴转为日期格式
dates = [str(y) for y in list(df['date'])]
x_date = [datetime.strptime(d, '%Y%m%d').date() for d in dates]
###########第二部分:matplotlib绘图##############
#设置显示中文
from pylab import *
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
#显示中文
matplotlib.rcParams['font.family'] = 'Microsoft JhengHei'
mpl.rcParams['font.sans-serif'] = ['Microsoft JhengHei'] #更新字体格式
mpl.rcParams['font.style'] = 'italic'
mpl.rcParams['font.size'] = 9 #更新字体大小
#figure布局
fig=plt.figure(figsize=(8,4))
ax1=fig.add_subplot(1,1,1)
#绘图
ax1.plot(x_date,df['HC'],ls='--',lw=3,color='b',marker='o',ms=6, mec='r',mew=2, mfc='w',label='业绩趋势走向')
plt.gcf().autofmt_xdate() # 自动旋转日期标记
#配置坐标轴
#设置x轴为日期格式
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y/%m/%d'))
plt.gca().xaxis.set_major_locator(mdates.DayLocator())
#去除部分边框和刻度线
ax1.spines['left'].set_color('none')
ax1.spines['right'].set_color('none')
ax1.spines['top'].set_color('none')
ax1.tick_params(labelleft=False,left=False,right=False,top=False)
ax1.tick_params(labelsize=9)
#设置坐标轴标签
plt.ylabel("销售额(万美元)",fontsize=11,color='b')
#标注数据
for xy in zip(x_date,df['HC']): #标注数据
plt.annotate("%0.02f" % round(xy[1]/10000,2), xy=xy, xytext=(2,12), textcoords='offset points',color='k',rotation=30)
#图像标题
ax1.set_title("业绩趋势走向图",fontsize=12)
#显示图像
plt.show()
3.案例3--双折线同图简单语法
import matplotlib.pyplot as plt
y1=[10,13,5,40,30,60,70,12,55,25]
x1=range(0,10)
x2=range(0,10)
y2=[5,8,0,30,20,40,50,10,40,15]
plt.plot(x1,y1,label='Frist line',linewidth=3,color='r',marker='o',
markerfacecolor='blue',markersize=12)
plt.plot(x2,y2,label='second line')
plt.xlabel('Plot Number')
plt.ylabel('Important var')
plt.title('Interesting Graph\nCheck it out')
plt.legend(loc='upper left')
plt.show()