Matplotlib 画布作图(单个子图)

思路:先生成图片,再添加画布,随后画图,最后逐步添加属性设置

基本设置

plt.rcParams['font.size']= 5.5
plt.rcParams['font.family']='Arial'

初始化图片和画布

fig = plt.figure(figsize=(4,2),dpi=300)
ax1 = fig.add_subplot(111)

画图(推荐使用DataFrame.plot函数)

emisGroup.plot(kind='barh', ax=ax1, stacked=True, cmap=cMap([B[1], B[4]]),ec='black',lw=0.3,legend=False,ylabel=False,zorder=3)

这里zorder指定画图顺序。设大一点是让后面的网格线在条形图后面
接下来的设置就是对画布进行一系列设置,返回的对象也都是matplotlib.xx对象

画布位置设置

from matplotlib.transforms import Bbox
ax1.set_position(Bbox([[0.125, 0.2], [0.9, 0.9]]))

plt.tight_layout()

Bbox语法: Bbox[[xmin, ymin], [xmax, ymax]]
plt.tight_layout()推荐,比较方便

颜色设置

matplotlib.colors是一个类。里面有关于颜色的各种自定义方法

from matplotlib.colors import ListedColormap,LinearSegmentedColormap

B = ['#2E4F68', '#A5C7DD']  # 各种blue

def cMap(c):
    return LinearSegmentedColormap.from_list('c', c, 265)

cmap = cMap(B[0],B[1])

生成了从浅到深的颜色系列,做条形图、环形图等的时候,指定cm参数为设置的cmap,会从里面挑颜色,而不是使用默认颜色。

坐标轴设置

粗细,是否可见

ax1.spines['bottom'].set_linewidth(0.5)
ax1.spines['top'].set_linewidth(0.5)
ax1.spines['right'].set_linewidth(0.5)
ax1.spines['left'].set_linewidth(0.5)

ax1.spines['left'].set_visible(0.5)

范围

ax1.set_xlim(0,450)

轴标签

ax1.tick_params(length=2, width=0.5, grid_linewidth=2, grid_linestyle='--')
ax1.set_yticklabels(['Others','Huanghe','Zhujiang','Changjing'])

轴标题

ax1.set_xlabel()

图例设置

ax1.legend(['Ocean-going','Coastal','Domestic'],loc='lower left')

关于legend的loc和bbox_to_anchor的设置
bbox是bound box,简单理解就是图例外面的一圈边。loc和bbox_to_anchor都是为了给legend定位。loc指定了定位点在哪里,bbox_to_anchor传入长度为2的元组(元素范围:0-1),指定定位点在图片中的位置。传入长度为4的元组,指定定位点在图片中的位置以及bbox的长宽。
在这里插入图片描述
当然其他的东西也可以设置bbox。具体设置方法可以是利用xx = ax1.get_xx(),先获取元素,然后xx.set_yy(arg)。比如

legend = ax1.get_legend()
legend.set_alpha(0.5)  # 设置透明度

label = ax1.get_yticklabels()+ax1.get_yticklabels()
for i in label:
	i.set_bbox(dict(facecolor='white', edgecolor='none', alpha=0.8, zorder=2))

可以用get获取元素,然后set设置元素属性。当传入参数为多个时,弄成字典。

网格线设置

ax1.grid(axis='x',linestyle='--', lw=0.5, color='lightgrey', zorder=0)

对画布进行设置的函数,都长成set_的样子。还有对整个元素进行设计的,就是_params的样子

有一些方法和属性从matplotlib官方文档里找不到,却能从百度到。。也能生效。还是需要多积累一些的

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值