Python数据分析

Python数据分析 知识量:13 - 56 - 232

13.5 绘制复杂图表><

折线图+折线图- 13.5.1 -

下面是一个双折线图的示例:

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.pyplot as plt
# 处理中文显示问题
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False
# 建立画布和坐标系
fig=plt.figure(figsize=(6,4))
ax=fig.add_subplot(1,1,1)
# 设置数据
x=np.array([1,2,3,4,5,6])
y1=np.array([56,885,457,695,1254,265])
y2=np.array([215,1065,498,1254,1423,899])
# 绘制双折线
ax.plot(x,y1,color='g',linestyle='dashdot',label='估算值')
ax.plot(x,y2,color='b',label='实际值')
# 添加数据标签
for a,b in zip(x,y1):
    plt.text(a,b,b)
for a,b in zip(x,y2):
    plt.text(a,b,b)
# 设置图例
plt.legend()
plt.show()

绘制的图形为:

Figure_1403.png

折线图+柱状图- 13.5.2 -

下面是绘制折线图+柱状图的示例:

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False  # 用来正常显示负号
fig=plt.figure(figsize=(6,4))
ax=fig.add_subplot(1,1,1)
# 设置数据
x=np.array([1,2,3,4,5,6])
y1=np.array([56,885,457,695,1254,265])
y2=np.array([215,1065,498,1254,1423,899])
# 绘制双折线
ax.bar(x,y1,color='b',label='估算值')
ax.plot(x,y2,color='g',label='实际值')
# 添加数据标签
for a,b in zip(x,y1):
    plt.text(a,b,b)
for a,b in zip(x,y2):
    plt.text(a,b,b)
# 设置图例
plt.legend()
plt.show()

绘制的图形为:

Figure_1418.png

双y轴图表- 13.5.3 -

双y轴图表是指在一个坐标系中,有两条y轴,即左右y轴。一般使用twinx()函数来实现。基本的流程是:

  1. 建立坐标系。

  2. 绘制主坐标轴(左边y轴)图表。

  3. 调用twinx函数。

  4. 绘制次坐标轴(右边y轴)图表。

下面是一个示例:

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False  # 用来正常显示负号
fig=plt.figure(figsize=(6,4))
ax=fig.add_subplot(1,1,1)
# 设置数据
x=np.array([1,2,3,4,5,6])
y1=np.array([56,885,457,695,1254,265])
y2=np.array([0.56,0.885,0.457,0.695,0.1254,0.265])
# 绘制主坐标轴图表
ax.plot(x,y1,label='实际值')
# 设置主坐标轴的名称
ax.set_xlabel('月份')
ax.set_ylabel('实际值')
# 设置主坐标轴图例
ax.legend(loc='upper left')
# 调用twinx()函数,设置共用x轴
ax2 = ax.twinx()
# 绘制次坐标轴图表
ax2.plot(x,y2,color='y',linestyle='dashdot',label='合格率')
# 设置次坐标轴的名称
ax2.set_ylabel('合格率')
# 设置次坐标轴图例
ax2.legend(loc=0)
plt.show()

绘制的图形为:

Figure_11525.png

以上图表存在一个问题,就是有两个图例,下面将图例合并为一个:

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False  # 用来正常显示负号
fig=plt.figure(figsize=(6,4))
ax=fig.add_subplot(1,1,1)
# 设置数据
x=np.array([1,2,3,4,5,6])
y1=np.array([56,885,457,695,1254,265])
y2=np.array([0.56,0.885,0.457,0.695,0.1254,0.265])
# 绘制主坐标轴图表
p1=ax.plot(x,y1,label='实际值')
# 设置主坐标轴的名称
ax.set_xlabel('月份')
ax.set_ylabel('实际值')
# 调用twinx()函数,设置共用x轴
ax2 = ax.twinx()
# 绘制次坐标轴图表
p2=ax2.plot(x,y2,color='y',linestyle='dashdot',label='合格率')
# 设置次坐标轴的名称
ax2.set_ylabel('合格率')
# 设置图例
p=p1+p2
labs=[l.get_label() for l in p]
ax.legend(p, labs,loc='upper right')
plt.show()

修改后,绘制的图形为:

Figure_1526.png