如何自定义横纵坐标刻度值?以及如何指定横纵坐标的格式?

可能有些同学在画图的过程中会遇到这样的问题:

  • 需要画某个物理量随时间的变化,但是横坐标显示的却是一个个自然数?或者横坐标虽然是datatime时间格式,但是在图中的显示却不是自己想要的,这个时候就需要我们手动调整坐标刻度的值;

  • 在画多张子图的时候,共用同一个横坐标,这个时候为了美观需要只保持最下方子图的横坐标,上面子图的横坐标只显示刻度,不显示值;

下面让我们来看看如何解决这两个问题。事实上这两个问题只需要两行代码即可解决:

ax.set_xticks(...)  # 设置显示哪些刻度(不是刻度值)
ax.set_xticklabels(..., fontdict=font)  # 设置所显示的刻度对应的刻度值,另外fontdict参数可设置刻度值的属性
# 第二行指令依赖于第一行指令,刻度与刻度值需要一一对应,否则会出现刻度与值对应不上的情况

1. 在第一个问题中,我有一天24小时每半小时一个值的表面温度数据,需要绘制表面温度的日变化图。

问题分析:现在有48个点,但是横坐标不需要标出所有48个值,我只想显示[‘01:30’, ‘05:30’, ‘09:30’, ‘13:30’, ‘15:30’, ‘21:30’]对应的刻度。

step1 确定[‘01:30’, ‘05:30’, ‘09:30’, ‘13:30’, ‘15:30’, ‘21:30’]所对应的是第几个点。在此问题中24小时每半小时一个数据,所有分别对应第[3, 11, 19, 27, 35, 43]个点;

step2 向上面两行代码中添加对应参数;

import matplotlib.pyplot as plt# 创建空白画布
fig = plt.figure(figsize=(8, 5))
# 在空白画布中创建绘图框(绘图对象)
ax = fig.add_subplot(1, 1, 1)
# 绘图
ax.plot(...)
...(其他步骤省略,这里只显示关键步骤)
# 注意ax是绘图对象
ax.set_xticks([3, 11, 19, 27, 35, 43])  # 或者ax.set_xticks(np.arange(3, 49, 8))
ax.set_xticklabels(['01:30', '05:30', '09:30', '13:30', '15:30', '21:30'])  # 设置刻度值

2. 有了第一个问题的基础,第二个问题就很简单了。

问题分析:多子图时,不显示重复的刻度值,但是仍然标注除刻度。

step1 仍然先找出需要标注的刻度位置,即对应的第几个点;

step2 将挑出刻度的刻度值设置为空;

ax.set_xticks([3, 11, 19, 27, 35, 43])  # 或者ax.set_xticks(np.arange(3, 49, 8))
ax.set_xticklabels([])

3. 我们都知道一般不同的期刊对paper中的图的要求也不一样,可能会对图中字体、大小等属性进行要求,这个时候就需要用到fontdict参数。

# 设置字体格式
font = {'family': 'Times New Roman',  # 设置字体格式#'style': 'italic',  # 修改倾斜程度'weight': 'normal',  # 修改粗细'color': 'black',  # 颜色'size': 15,  # 字体大小}  # 设置xlabel、title、text等字体设置ax.set_xticks([3, 11, 19, 27, 35, 43])  # 或者ax.set_xticks(np.arange(3, 49, 8))
ax.set_xticklabels(['01:30', '05:30', '09:30', '13:30', '15:30', '21:30'], fontdict=font)

注意: 如果想要对刻度值设置字体属性,set_xticksset_xticklabels都需要,应该先挑出想要修改字体属性的点,再进行设置。

程序部分源码分享(略去了数据处理部分):

第一张图主要绘图代码:plot()部分根据实际情况修改;

import numpy as np
import matplotlib.pyploy as plt# 设置字体格式
font = {'family': 'Times New Roman',  # 设置字体格式#'style': 'italic',  # 修改倾斜程度'weight': 'normal',  # 修改粗细'color': 'black',  # 颜色'size': 15,  # 字体大小}  # 设置xlabel、title、text等字体设置fig = plt.figure(figsize=(5, 4))
ax = fig.add_subplot(1, 1, 1)
# # paint
ax.plot(paint_day.mean(axis=0), label='paint')  # 平均
ax.fill_between(paint_day.mean(axis=0).index, paint_day.mean(axis=0) + paint_day.std(axis=0), paint_day.mean(axis=0) - paint_day.std(axis=0), alpha=.2, linewidth=0, label=r'${\rm +/-STD_{paint}}$')  # 加减标准差,阴影图# 设置y轴刻度的范围
ax.set_ylim((-5, 47))
ax.set_yticks(np.arange(0, 45, 10))
ax.set_yticklabels(np.arange(0, 45, 10), fontdict=font)
# 设置x轴刻度的范围
ax.set_xlim((0, 47))
ax.set_xticks(np.arange(3, 49, 8))
ax.set_xticklabels(['01:30', '05:30', '09:30', '13:30', '15:30', '21:30'], fontdict=font)
# 设置坐标标题
ax.set_ylabel('Cooling efficiency(%)', fontdict=font)
# 设置标题
ax.set_title('The daily cooling efficiency', fontdict=font)
# 设置图例
plt.legend(loc='upper left', ncol=2, fontsize=7)

第二张图主要绘图代码:plot()部分根据实际情况修改;

import numpy as np
import matplotlib.pyploy as plt# 设置字体格式
font = {'family': 'Times New Roman',  # 设置字体格式#'style': 'italic',  # 修改倾斜程度'weight': 'normal',  # 修改粗细'color': 'black',  # 颜色'size': 12,  # 字体大小}  # 设置xlabel、title、text等字体设置fig = plt.figure(figsize=(10, 5), dpi=300)
# # 绘图散点图
ax = fig.add_subplot(2, 1, 1)
ax.scatter(roof_1d.index, roof_1d['3sigma_albedo'], s=5, label='roof')
ax.scatter(tpo_1d.index, tpo_1d['3sigma_albedo'], s=5, label='tpo')
ax.scatter(aa_1d.index, aa_1d['3sigma_albedo'], s=5, label='aa')
# 纵坐标刻度和标签
ax.set_ylabel('Albedo', fontdict=font)
ax.set_ylim((0, 1))
ax.set_yticks([0, 0.25, 0.5, 0.75])
ax.set_yticklabels([0, 0.25, 0.5, 0.75], fontdict=font)
# 设置文本标签(a),注意:在这里绘图的时候x为datatime时间格式,所以text()中的横坐标也需要用时间格式(直接用字符串'2017-02'也是可以的)
ax.text(datetime.strptime('2017-02', '%Y-%m'), 0.9, '(a)', fontdict=font)# 不显示横坐标标签,但是显示刻度
# 生成月份
month = [(i-8) % 12 for i in range(43)]
for i in range(len(month)):if month[i] == 0:month[i] = 12
month = month[::2]
# 生成年份
year = []
for i in range(22):if i < 5:year.append(2017)elif i < 11:year.append(2018)elif i < 17:year.append(2019)else:year.append(2020)
ticks = [datetime.strptime(str(year[i]) + str(month[i]), '%Y%m') for i in range(22)]
ax.set_xticks(ticks)
ax.set_xticklabels([])
# 图例
ax.legend(loc='upper right', ncol=3, fontsize=10)# # 降水和PM10
ax1 = fig.add_subplot(2, 1, 2)
l1 = ax1.bar(np.arange(40), rain_1mon['rainfall'].loc['2017-04-01':'2020-10-01'], width=0.5, linewidth=4, color='grey', alpha=0.6, label='Precipitation')
ax1.set_ylabel('Rainfall(mm)', fontdict=font)
# 纵坐标
ax1.set_ylim((1, 450))
ax1.set_yticks([0, 100, 200, 300, 400])
ax1.set_yticklabels([0, 100, 200, 300, 400], fontdict=font)
# 设置横坐标月份
labels = [(i-8) % 12 for i in range(43)]
for i in range(len(labels)):if labels[i] == 0:labels[i] = 12
ax1.set_xticks(np.arange(0, 43, 2))
ax1.set_xticklabels(labels[::2], fontdict=font)
# 标记横坐标的年份
ax1.set_title('2017' + ' ' * 13 + '|' + ' ' * 19 + '2018' + ' ' * 20 + '|' + ' ' * 20 + '2019' + ' ' * 19 + '|'+ ' ' * 18  + '2020', x=0.495, y=-0.25, fontdict=font)
# 设置文本标签(b)
ax1.text(-2.15, 405, '(b)', fontdict=font)#绘制副坐标
ax2 = ax1.twinx()
l2 = ax2.scatter(np.arange(43), pm10_1mon['PM10'].loc['2017-04-01':'2020-10-01'], marker='o', color='none', edgecolors='black', label='PM10')
ax2.set_ylabel(r'$PM10(\mu g·m^{-3})$', fontdict=font)
# 纵坐标
ax2.set_ylim((1, 170))
ax2.set_yticks([0, 50, 100, 150])
ax2.set_yticklabels([0, 50, 100, 150], fontdict=font)
# 横坐标名称
ax2.set_title('Date', x=0.483, y=-0.35, fontdict=font)
# 设置图例
ax2.legend(handles=[l1, l2], loc='upper right', ncol=2, fontsize=10)
# # 调整子图间距,横纵
plt.subplots_adjust(wspace=0.0, hspace=0.1)
plt.savefig('2.2 降水和灰霾与反照率的对比图.svg',  bbox_inches='tight', pad_inches=0.1)

如何自定义横纵坐标刻度?以及如何指定横纵坐标的格式?相关推荐

  1. 成功解决matplotlib绘图的时候,自定义横坐标和纵坐标刻度数值(调整坐标轴刻度间隔)

    成功解决matplotlib绘图的时候,自定义横坐标和纵坐标刻度数值(调整坐标轴刻度间隔) 目录 解决问题 解决方法 相关文章 成功解决matplotlib绘图的时候,自定义横坐标和纵坐标刻度数值(调 ...

  2. 计算机如何做分类轴无刻度线,用excel画散点图,怎样使横坐标与纵坐标刻度一致?不用电脑默认的间距-刻度条间距...

    用excel做X,Y散点图的问题,如何让横坐标等距离显示? 用鼠标右键在图片上选中横坐标轴,在弹出的菜单中选"坐标轴格式",出现一个窗口,选"坐标轴"选项卡,勾 ...

  3. DedeCMS实现自定义表单提交后发送指定QQ邮箱法

    https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&tn=monline_3_dg&wd=dedecms 邮箱&oq=d ...

  4. 部分程序或软件默认安装在C盘,没有自定义选项,如何安装到指定文件夹

    部分程序或软件默认安装在C盘,没有自定义选项,如何安装到指定文件夹(此处用Xmind举例) 1.问题描述 2.解决原理 3.解决步骤 1.问题描述 Xmind会默认安装在C盘,但我们为了解放C盘空间, ...

  5. 举个栗子~Tableau 技巧(209):用自定义形状实现刻度环形图

    实际分析场景中,数据粉对美总是很执着,如何让分析占比的环形图,看着更漂亮点?比如给环形图增加刻度. 虽然数据分析还是应以实用为主,但既然 Tableau 是为美而生,那我们就试试看吧~ 这里,为大家分 ...

  6. R语言使用pdf函数将可视化图像结果保存到pdf文件中、使用pdf函数打开图像设备、使用dev.off函数关闭图像设备、自定义width参数和height参数指定图像的宽度和高度

    R语言使用pdf函数将可视化图像结果保存到pdf文件中.使用pdf函数打开图像设备.使用dev.off函数关闭图像设备.自定义width参数和height参数指定图像的宽度和高度 目录

  7. matlab 3个纵坐标,[转载]Matlab plotyy画双纵坐标图实例

    Matlab plotyy画双纵坐标图实例 x = 0:0.01:20; y1 = 200*exp(-0.05*x).*sin(x); y2 = 0.8*exp(-0.5*x).*sin(10*x); ...

  8. php怎么输出以前的时间,php输出指定时间以前时间格式的方法_PHP

    本文实例讲述了php输出指定时间以前时间格式的方法.分享给大家供大家参考.具体分析如下: 比如说你需要在php中输出3天前,20分钟以前,可以参考下面的代码 function ago($time) { ...

  9. [WEB API] CLIENT 指定请求及回应格式(XML/JSON)

    [Web API] Client 指定请求及响应格式(xml/json) Web API 支持的格式请参考 http://www.asp.net/web-api/overview/formats-an ...

最新文章

  1. 简单说说你对Java内存模型的原子性的了解吧?
  2. java之Synchronize
  3. 【C】strcpy()需谨慎使用;
  4. [DirectX11]Gerstner波 实现简单的水面模拟
  5. HAProxy反向代理搭建discuz论坛
  6. Android开发笔记(一百四十四)高仿支付宝的头部伸缩动画
  7. oracle sql 字段行转列
  8. 操作系统分区原理(笔记)
  9. tpc-ds99 工具使用
  10. cpu和接口之间数据传送控制方式
  11. tp5 怎么安装 后盾网加密解密crypt扩充扩展包?
  12. c语言怎么让程序停止3秒,c语言暂停语句1秒
  13. vim-python怎么用_技术|如何在使用 Vim 时访问/查看 Python 帮助
  14. iOS app签名机制
  15. 立创EDA布线使用技巧
  16. switch php函数,php的switch函数
  17. 天梯赛校内初赛3.23
  18. 学习MATLAB软件心得
  19. 京东商品详情APP原数据API接口-(item_get_app-获得JD商品详情原数据API接口),京东API接口
  20. 人脉变现小程序裂变定制开发

热门文章

  1. python和shell优点缺点_Linux shell的优点和缺点
  2. 比特大陆詹克团:出差被换法人,被兄弟背后狠狠捅刀
  3. 朴素贝叶斯分类工作流程(离散数据,连续数据)
  4. cas协议官方文档的理解(除代理模式)
  5. 简要说明类的结构java_【深入Java虚拟机】之二:Class类文件结构
  6. IP地址与Mac地址的关系与区别 - 学习/实践
  7. 如何使用工时表管理项目和非项目的资源?
  8. TZC 1283: 简单排序 —— 归并排序
  9. html css画小猪佩琪,【前端切图】用css画一个卡通形象-小猪佩奇
  10. Android运行环境Dalvik模式和ART模式的区别