开始吧,第二张图
gmv.png这张图有三个地方要注意的:
- 建立了次坐标轴;
- 图表上标注了每个数据的刻度值;
-
图例:主坐标轴和次坐标轴的图例放在一起。
给自己打打气吧
jiayou.png
一、建立次坐标轴
fig = plt.figure(figsize=(9,4))
ax1 = fig.add_subplot(111)
ax2 = ax1.twinx()
ax2 = ax1.twinx()
创建一个与ax1共享x轴的ax2。
此外,matplotlib还有一个twiny()函数,可以创建一个共享y轴的此坐标轴。
二、标注数据刻度
plt.text(x=0.5, y=0.5, s=32123)
plt.text()函数可以在图表上的制定位置,写下指定的值。
第一个参数x表示文字的横坐标位置,
第二个参数y表示文字的纵坐标位置,
第三个参数s表示要写的文字是什么。
还可以设置文字的大小,样式,颜色,背景颜色等。具体可看官网plt.text()。
三、图例
line1, = ax1.bar(x, height=money, label="订单额", width=0.25,facecolor="#4F8B83" )
line2, = ax2.plot(x,wow,color="#FAC599",label="环比")
line3, = ax2.plot(x,yoy,color="#E76178",label="同比")
plt.legend((line1, line2, line3), ("订单额", "环比", "同比"), bbox_to_anchor=(1.25,0.7), edgecolor="none", facecolor="none")
line1, = ax.plot([1, 2, 3], label="订单额")
ax.plot([1, 2, 3], label="订单额") 返回一个元组,
line1, 加个逗号,再赋值,表示把返回的元组的第一个元素,赋给line1。
plt.legend((line1, line2, line3), ("订单额", "环比", "同比"))
把这三条线的图例写在一起。
完整代码:
#coding:utf8
import matplotlib.pyplot as plt
import numpy as np
#—————————————步骤一:获取数据——————————————
#数据:每周的订单金额(money),环比(wow),同比(yoy),
#横坐标数据:第几周
money = [45642,59538,73871,54833]
wow = [-0.52,-0.52,-0.57,-0.37]
yoy = [-0.18,0.30,0.24,-0.26]
weeks = ["第1周","第2周","第3周","第4周",]
#—————————————步骤二:创建图像——————————————
#创建一个画板fig。创建第一张图ax1。
fig = plt.figure(figsize=(9,4))
ax1 = fig.add_subplot(111)
#————————步骤三:画订单额的图————————————————
#plt.bar画出柱形图。
#第一个参数是横坐标的列表,参数height是纵坐标的列表。参数width是柱子的宽度。facecolor设置柱形图填充颜色。
x = range(len(weeks))
line1, = ax1.bar(x, height=money, label="订单额", width=0.25,facecolor="#4F8B83" )
#————————步骤四:设置细节——————————
plt.title("订单额")
#设置x轴的坐标刻度名称。设置y轴坐标刻度颜色
plt.xticks(x,weeks,color="#999999")
plt.yticks(color="#999999")
#在图表上,添加每个数据的刻度。
for i,j in zip(x,money):
plt.text(i,j+2000,j,ha="center",va="bottom",color="#333333")
#设置坐标轴顶部,底部无颜色
ax1.spines["top"].set_color("none")
ax1.spines["bottom"].set_color("#aaaaaa")
ax1.spines["left"].set_color("#aaaaaa")
ax1.spines["right"].set_color("#aaaaaa")
#————————步骤五:画次坐标轴图——————————
#画次坐标轴。ax2 = ax1.twinx() 表示ax2是和ax1共用一个x轴坐标的图表。
#也有twiny()方法,是共用y轴坐标。
ax2 = ax1.twinx()
line2, = ax2.plot(x,wow,color="#FAC599",label="环比")
line3, = ax2.plot(x,yoy,color="#E76178",label="同比")
#————————步骤六:设置次坐标轴的细节——————————
plt.yticks(np.linspace(-0.5,0.5,5),[format(i, ".0%") for i in np.linspace(-0.5,0.5,5)],color="#999999")
#添加数据刻度
for i,j in zip(x,wow):
plt.text(i+0.15,j,format(j,".0%"),ha="left",va="center",color="#333333")
for i,j in zip(x,yoy):
plt.text(i+0.15,j,format(j,".0%"),ha="left",va="center",color="#333333")
#调整间距
plt.subplots_adjust(right=0.8)
#设置坐标轴边框颜色
ax2.spines["top"].set_color("none")
ax2.spines["bottom"].set_color("#aaaaaa")
ax2.spines["left"].set_color("#aaaaaa")
ax2.spines["right"].set_color("#aaaaaa")
#设置图例
plt.legend((line1, line2, line3), ("订单额", "环比", "同比"),bbox_to_anchor=(1.25,0.7),edgecolor="none",facecolor="none")
#————————步骤七:保存图片——————————
plt.savefig("gmv.png",transparent=True,format='png')
plt.show()
继续,第三张图
process.png这张图需要注意的是堆积条形图。
fig = plt.figure(figsize=(9,2))
ax = fig.add_subplot(1,1,1)
y = [1,1.5]
ax.barh(y,width=before_data,height=0.3,left=0,label="之前",facecolor="#4F8B83")
ax.barh(y,width=week_data,height=0.3,left=before_data,label="本周",facecolor="#E76178")
ax.barh(y,width=left_data,height=0.3,left=[i+j for i,j in zip(before_data,week_data)],label="剩余",facecolor="#D7DDDB")
ax.barh(y,width=before_data,height=0.3,left=0,label="之前",facecolor="#4F8B83")
绘制条形图。
其中第一个参数,是条形图在y轴的坐标列表;
参数width是这个条形图的值;
参数height来控制条形图的粗细;
参数left,来设置条形图左边的开始位置,这个参数用来做堆积条形图。
可以看到第一个ax.barh() 参数left的值是0,第二个ax.barh()参数left的值是之前数据,第三个ax.barh()参数left的值 是之前数据加上本周数据。
完整代码
#coding:utf8
import matplotlib.pyplot as plt
import numpy as np
#—————————————步骤一:获取数据——————————————
#获取数据:之前订单和流量的百分比(before_data),
#本周订单和流量完成的百分比(week_data),剩余订单和流量的百分比(left_data)
before_data = [0.31,0.26]
week_data = [0.21,0.23]
left_data = [0.48,0.51]
#—————————————步骤二:画出图形——————————————
# 条形图在Y轴的坐标列表。
y = [1,1.5]
#创建图像
fig = plt.figure(figsize=(9,2))
ax = fig.add_subplot(1,1,1)
#画出条形图
#barh用于画水平柱状图。
#x,第一个参数用来标记bar的y坐标位置。但这个参数名称用x或用y都会报错,不知道参数名称是啥
#width,bar的宽度
#height,bar的粗细,可以用列表来设置每个bar的粗细。默认是0.8。
#left,表示x坐标开始的位置,用来绘制堆积条形图
ax.barh(y,width=before_data,height=0.3,left=0,label="之前",facecolor="#4F8B83")
ax.barh(y,width=week_data,height=0.3,left=before_data,label="本周",facecolor="#E76178")
ax.barh(y,width=left_data,height=0.3,left=[i+j for i,j in zip(before_data,week_data)],label="剩余",facecolor="#D7DDDB")
#—————————————步骤三:设置细节——————————————
plt.title("本周进度")
#设置y坐标轴的刻度名称
plt.yticks([1,1.5],[r"$UV$",r"$GMV$"])
#设置x坐标轴,以百分数显示。
plt.xticks(np.linspace(0,1,5),[format(i, ".0%") for i in np.linspace(0,1,5)],color="#111111")
#设置图例的位置,边框颜色,填充颜色
ax.legend(bbox_to_anchor=(1.1,0.7),edgecolor="none",facecolor="none")
#添加数据刻度值。
for i,j in zip(before_data,y):
plt.text(i-0.1,j,format(i, ".0%"),ha="right",va="center",color="#ffffff")
for i,j,k in zip(week_data,y,before_data):
plt.text(i+k-0.1,j,format(i, ".0%"),ha="right",va="center",color="#ffffff")
for i,j,k,z in zip(left_data,y,before_data,week_data):
plt.text(i+k+z-0.1,j,format(i, ".0%"),ha="right",va="center",color="#ffffff")
#设置坐标轴边框无颜色
ax.spines["right"].set_color("none")
ax.spines["bottom"].set_color("none")
ax.spines["left"].set_color("#dddddd")
ax.spines["top"].set_color("none")
#—————————————步骤四:保存图片——————————————
plt.savefig("process.png",transparent=True,format='png',dpi=1000)
plt.show()
网友评论