其他
Python可视化32|matplotlib-断裂坐标轴(broken_axis)|图例(legend)详解
"pythonic生物人"的第77篇分享
当数据不在一个数量级上,但又要在一张图上同时反映大数据和小数据的变化规律,需要绘制断裂坐标轴。
本文详细介绍如何绘制断裂坐标轴(broken_axis)及图例(legend)设置。
本文速览
更多教程,欢迎关注@pythonic生物人
目录
1、x轴坐标轴断裂 or 打断
2、y轴坐标轴断裂 or 打断
3、brokenaxes打断坐标轴
4、图例设置
loc参数详解
断裂坐标轴的原理是在不同子图上绘制同一图,设置子图轴显示范围,去掉子图脊,使得看起来像一张图。
1、x轴坐标轴断裂 or 打断
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(19680801)
pts = np.random.rand(30)*.2
pts[[3, 14]] += 1.8# 将索引为3个和14的元素加1.8处理成两个离散点
fig, (ax1, ax2) = plt.subplots(1, 2, sharey=True, dpi=100)
ax1.plot(pts)
ax2.plot(pts)
ax1.set_xlim(0, 10) # 子图1设置y轴范围,只显示部分图
ax2.set_xlim(11, 20) # 子图2设置y轴范围,只显示部分图
ax1.spines['right'].set_visible(False)#关闭子图1中底部脊
ax2.spines['left'].set_visible(False)##关闭子图2中顶部脊
d = .85 #设置倾斜度
#绘制断裂处的标记
kwargs = dict(marker=[(-1, -d), (1, d)], markersize=15,
linestyle='none', color='r', mec='r', mew=1, clip_on=False)
ax1.plot([1, 1], [1, 0],transform=ax1.transAxes, **kwargs)
ax2.plot([0, 0], [0, 1], transform=ax2.transAxes, **kwargs)
plt.tight_layout()
plt.show()
2、y轴坐标轴断裂 or 打断
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(19680801)
pts = np.random.rand(30)*.2
pts[[3, 14]] += 1.8#将索引为3个和14的元素加1.8处理成两个离散点
fig, (ax1, ax2) = plt.subplots(2, 1, sharex=True, dpi=100)
ax1.plot(pts)
ax2.plot(pts)
ax1.set_ylim(.4, 2.) # 子图1设置y轴范围,只显示部分图
ax2.set_ylim(0, .28) # 子图2设置y轴范围,只显示部分图
ax1.spines['bottom'].set_visible(False)#关闭子图1中底部脊
ax2.spines['top'].set_visible(False)##关闭子图2中顶部脊
ax2.set_xticks(range(0,31,1))
d = .85 #设置倾斜度
#绘制断裂处的标记
kwargs = dict(marker=[(-1, -d), (1, d)], markersize=15,
linestyle='none', color='r', mec='r', mew=1, clip_on=False)
ax1.plot([0, 1], [0, 0],transform=ax1.transAxes, **kwargs)
ax2.plot([0, 1], [1, 1], transform=ax2.transAxes, **kwargs)
plt.tight_layout()
plt.show()
3、brokenaxes打断坐标轴
该方法非常简单,相较于1,2方法。
import matplotlib.pyplot as plt
from brokenaxes import brokenaxes
import numpy as np
fig = plt.figure(dpi=120)
bax = brokenaxes(xlims=((0, 10), (11, 20)), #设置x轴裂口范围
ylims=((0, 0.28), (0.4, 2)), #设置y轴裂口范围
hspace=0.25,#y轴裂口宽度
wspace=0.2,#x轴裂口宽度
despine=False,#是否y轴只显示一个裂口
diag_color='r',#裂口斜线颜色
)
bax.plot(pts)
plt.show()
4、图例设置
import matplotlib.pyplot as plt
plt.figure(dpi=100)
#plt.style.use('seaborn-whitegrid')
plt.plot([1, 2, 3],
label='legend1',#label添加图例名称
)
plt.plot([2, 4, 6],
label='legend2',#label添加图例名称
)
legend = plt.legend(loc=9,#图例位置
bbox_to_anchor=(0.45, 1),#控制图例相对于figure,这里不是axes的位置,改参数设置后loc不起作用
ncol=2,#图例分两行显示,当分组很多时特别有用
fontsize=10,#图例大小
title='Legend',#图例标题
title_fontsize=10,#标题字号
shadow=True,#背景阴影
fancybox=True,#背景框四个角为圆角
framealpha=1,##背景框透明度
facecolor='#BAE4B3',#背景框填充颜色
edgecolor='r',#背景框颜色
#更多参数:matplotlib.pyplot.legend
)
plt.show()
loc参数详解
控制图例在图中位置,有11个参数可选择,如下:
Location String Location Code
'best' 0
'upper right' 1
'upper left' 2
'lower left' 3
'lower right' 4
'right' 5
'center left' 6
'center right' 7
'lower center' 8
'upper center' 9
'center' 10
参考资料
https://github.com/bendichter/brokenaxes https://matplotlib.org/examples/pylab_examples/broken_axis.html https://matplotlib.org/api/_as_gen/matplotlib.pyplot.legend.html?highlight=legend#matplotlib.pyplot.legend
更多教程,欢迎关注@pythonic生物人
"点赞"、"在看"鼓