↑↑点击上方蓝字,回复资料,嘿嘿,10个G的惊喜

在一幅图表中,文本、坐标轴和图像的是信息传递的核心,对着三者的设置是作图这最为关心的内容,在上一篇博客中虽然列举了一些设置方法,但没有进行深入介绍,本文以围绕如何对文本和坐标轴进行设置展开(对图像的设置在后续介绍到各种图绘制时介绍)。

这里所说的文本是指在使用matplotlib作图过程中通过代码的方式往图中添加的各种文字,包括figure标题、axes标题、坐标轴标签、坐标轴刻度标签、注释、普通文本等。轴设置指的是对与坐标轴相关的的元素的设置,例如显示范围、刻度、刻度标签等。

from matplotlib import pyplot as pltimport numpy as npimport matplotlib as mplmpl.rcParams['font.sans-serif'] = ['SimHei']  # 中文字体支持

1 标题

(1)figure标题与axes标题

x1 = np.linspace(0.0, 5.0, 100)y1 = np.cos(2 * np.pi * x1) * np.exp(-x1)fig = plt.figure(figsize=(8, 3))ax1 = fig.add_subplot(121)ax2 = fig.add_subplot(122)fig.subplots_adjust(top=0.85)fig.suptitle('figure标题')ax1.set_title('ax1-标题')ax2.set_title('ax2-标题')plt.show()

(2)字体设置

from matplotlib.font_manager import FontProperties

x1 = np.linspace(0.0, 5.0, 100)y1 = np.cos(2 * np.pi * x1) * np.exp(-x1)fig = plt.figure(figsize=(8, 3))ax1 = fig.add_subplot(121)ax2 = fig.add_subplot(122)fig.subplots_adjust(top=0.85)fig.suptitle('figure标题', color='red', fontsize=20)font = FontProperties()  # 字体类font.set_family('serif')font.set_name('SimHei')font.set_style('italic')ax1.set_title('ax1-标题',fontproperties=font)  # 传递字体类设置字体ax2.set_title('ax2-标题', color='green')plt.show()

(3)设置水平距离

x1 = np.linspace(0.0, 5.0, 100)y1 = np.cos(2 * np.pi * x1) * np.exp(-x1)fig, axs = plt.subplots(3, 1, figsize=(5, 10))fig.subplots_adjust(top=0.93)fig.suptitle('figure标题', color='red', fontsize=20)locs = ['left', 'center', 'right']for ax, loc in zip(axs, locs):    ax.plot(x1, y1)    ax.set_title('axes标题 '+ loc, loc=loc, color='blue')plt.show()

(4)设置垂直距离

x1 = np.linspace(0.0, 5.0, 100)y1 = np.cos(2 * np.pi * x1) * np.exp(-x1)fig, ax = plt.subplots(figsize=(5, 3))fig.subplots_adjust(top=0.8)ax.plot(x1, y1)ax.set_title('垂直距离测试图-标题', pad=30)plt.show()

2 坐标轴标签

(1)添加坐标轴标签

x1 = np.linspace(0.0, 5.0, 100)y1 = np.cos(2 * np.pi * x1) * np.exp(-x1)

fig, ax = plt.subplots(figsize=(5, 3))fig.subplots_adjust(bottom=0.15, left=0.2)ax.plot(x1, y1)ax.set_xlabel('时间 [s]')ax.set_ylabel('阻尼振荡 [V]')

plt.show()

(2)与坐标轴间距

x1 = np.linspace(0.0, 5.0, 100)y1 = np.cos(2 * np.pi * x1) * np.exp(-x1)fig, ax = plt.subplots(figsize=(5, 3))fig.subplots_adjust(bottom=0.15, left=0.2)ax.plot(x1, y1*10000)ax.set_xlabel('时间 [s]', labelpad=28)ax.set_ylabel('阻尼振荡 [V]', labelpad=28)   # 指定labelpad参数设置距离

plt.show()

(3)位置设置

x1 = np.linspace(0.0, 10.0, 100)y1 = np.cos(2 * np.pi * x1) * np.exp(-x1)fig, ax = plt.subplots(figsize=(5, 3))fig.subplots_adjust(bottom=0.15, left=0.2)ax.plot(x1, y1)ax.set_xlabel('time [s]',               position=(0.2, 1e6),  # 位置,坐标轴总长的比例              horizontalalignment='left')  # 对齐方式,左对齐,右对齐ax.set_ylabel('Damped oscillation [V]')

plt.show()

(4)字体设置

from matplotlib.font_manager import FontProperties

font = FontProperties()font.set_family('serif')font.set_name('DejaVu Sans')font.set_style('italic')

fig, ax = plt.subplots(figsize=(5, 3))fig.subplots_adjust(bottom=0.15, left=0.2)ax.plot(x1, y1)ax.set_xlabel('time [s]', fontsize=20, fontweight='bold')  # 可以通过出不同参数来设置字体ax.set_ylabel('Damped oscillation [V]', fontproperties=font, color='red')  # 也可以直接传递一个FontProperties类实例设置字体

plt.show()

3 刻度和刻度标签

(1)设置刻度标签

x1 = np.linspace(0.0, 5.0, 100)y1 = np.cos(2 * np.pi * x1) * np.exp(-x1)fig, axs = plt.subplots(5, 1, figsize=(10, 6), tight_layout=True)axs[0].plot(x1, y1)axs[1].plot(x1, y1)axs[2].plot(x1, y1)axs[3].plot(x1, y1)axs[4].plot(x1, y1)

axs[0].xaxis.set_ticks([1, 2, 3, 4, 5])  # 这是默认的,系统会根据传递的数据自动设置刻度axs[1].xaxis.set_ticks([0, 1, 3 , 5,])  # 传递列表axs[2].xaxis.set_ticks(np.arange(0., 5.1, 2.0))  # 每0.5个单位间隔显示axs[3].xaxis.set_ticks(np.arange(0., 5.1, 0.5))   # 每2个单位显示

ticks_2 = np.arange(0., 5.1, 0.5)tickla_2 = ['%1.2f' % tick for tick in ticks_2]  # 显示精度axs[4].xaxis.set_ticks(ticks_2)axs[4].xaxis.set_ticklabels(tickla_2)

plt.show()

(2)刻度标签显示其他字符

x1 = np.linspace(0.0, 5.0, 100)y1 = np.cos(2 * np.pi * x1) * np.exp(-x1)fig = plt.figure()axes = fig.add_subplot(1, 1, 1)

axes.plot(x1, y1)axes.xaxis.set_ticks([1, 2 , 3, 4, 5]) axes.set_xticklabels(['第一天', '第二天', '第三天', '第四天', '第五天'],   # 这里的字符列表必须与上面一行的刻度列表一一对应                       color='red', fontsize=15,   # 直接设置样式,这里与其他设置text的方法一样                       rotation=30)  # 旋转角度plt.show()

(3)刻度数量与格式

x1 = np.linspace(0.0, 5.0, 100)y1 = np.cos(2 * np.pi * x1) * np.exp(-x1)fig = plt.figure()axes = fig.add_subplot(1, 1, 1)axes.plot(x1, y1)

formatter = mpl.ticker.FormatStrFormatter('%1.5f')  # 设置显示精度格式locator = mpl.ticker.MaxNLocator(nbins=3)  # 设置显示刻度的数量axes.xaxis.set_major_formatter(formatter)axes.xaxis.set_major_locator(locator)

plt.show()

(4)自定义是否显示某刻度标签

x1 = np.linspace(0.0, 10.0, 100)y1 = np.cos(2 * np.pi * x1) * np.exp(-x1)def formatoddticks(x, pos):    """    如果是3的倍数,则显示空    """    if x % 3:        return '%1.2f' % x    else:        return ''  # 可以设置成其它字符

fig, ax = plt.subplots(figsize=(5, 3), tight_layout=True)ax.plot(x1, y1)formatter = mpl.ticker.FuncFormatter(formatoddticks)  # 将定义的格式函数作为参数传递locator = mpl.ticker.MaxNLocator(nbins=6)ax.xaxis.set_major_formatter(formatter)ax.xaxis.set_major_locator(locator)

plt.show()

(5)单独设置某一刻度标签样式

x1 = np.linspace(0.0, 5.0, 100)y1 = np.cos(2 * np.pi * x1) * np.exp(-x1)fig = plt.figure()axes = fig.add_subplot(1, 1, 1)axes.plot(x1,y1)label_1 = axes.get_xticklabels()[3]label_1.set_color('red')label_1.set_fontsize(20)label_1.set_label(15)plt.show()

(6)主刻度、次刻度、网格

from matplotlib.ticker import MultipleLocator, FormatStrFormatter

x1 = np.linspace(0.0, 100.0, 500)y1 = np.sin(0.1*np.pi*x1)*np.exp(-x1*0.01)fig = plt.figure()ax = fig.add_subplot(1, 1, 1)ax.plot(x1,y1)

xmajorLocator   = MultipleLocator(20) #将x主刻度标签设置为20的倍数xmajorFormatter = FormatStrFormatter('%5.1f') #设置x轴标签文本的格式xminorLocator   = MultipleLocator(5) #将x轴次刻度标签设置为5的倍数

ymajorLocator   = MultipleLocator(0.5) #将y轴主刻度标签设置为0.5的倍数ymajorFormatter = FormatStrFormatter('%1.1f') #设置y轴标签文本的格式yminorLocator   = MultipleLocator(0.1) #将此y轴次刻度标签设置为0.1的倍数

#设置主刻度标签的位置,标签文本的格式ax.xaxis.set_major_locator(xmajorLocator)ax.xaxis.set_major_formatter(xmajorFormatter)

ax.yaxis.set_major_locator(ymajorLocator)ax.yaxis.set_major_formatter(ymajorFormatter)

#显示次刻度标签的位置,没有标签文本ax.xaxis.set_minor_locator(xminorLocator)ax.yaxis.set_minor_locator(yminorLocator)

ax.xaxis.grid(True, which='major') #x坐标轴的网格使用主刻度ax.yaxis.grid(True, which='minor') #y坐标轴的网格使用次刻度

plt.show()

(7)刻度线样式设置

刻度线的样式主要是通过axes.tick_params()方法来设置,该方法主要参数如下:

  • axis:取值为'x'、'y'或'both',指定设置哪一条轴上的刻度,'both'表示同时设置两条坐标轴,默认值为'both';
  • which:取值为 'major'、'minor'、'both',分别代表设置主刻度线、副刻度线以及同时设置,默认值为'major';
  • direction:值为'in'、'out'、'inout',分别代表刻度线显示在绘图区内侧、外侧以及同时显示;
  • length和width:分别用于设置刻度线的长度和宽度;
  • pad:用于设置刻度线与标签间的距离;
  • color、labelcolor、colors:参数color、labelcolor、colors分别用于设置刻度线的颜色、刻度线标签的颜色以及同时设置刻度线及标签颜色;
  • labelsize:参数labelsize用于设置刻度线标签的字体大小;
  • bottom, top, left, right:参数bottom, top, left, right的值为布尔值,分别代表设置绘图区四个边框线上的的刻度线是否显示;
  • labelbottom, labeltop, labelleft, labelright:参数labelbottom, labeltop, labelleft, labelright的值为布尔值,分别代表设置绘图区四个边框线上的刻度线标签是否显示
x1 = np.linspace(0.0, 5.0, 100)y1 = np.cos(2 * np.pi * x1) * np.exp(-x1)fig = plt.figure()axes = fig.add_subplot(1, 1, 1)axes.plot(x1,y1)axes.tick_params(axis='x',  # 只设置x轴刻度               direction='in',  # 刻度线朝内               length=3, width=3,  # 长度和宽度               colors='green',   # 颜色               labelsize=15,   # 标签字体大小               top=True,               left=True,               labeltop=True,               labelright=True              )axes.tick_params(axis='y',  # 只设置y轴刻度               direction='in',  # 刻度线朝内               length=6, width=3,  # 长度和宽度               colors='red',   # 颜色               labelsize=15,   # 标签字体大小               top=True,               right=True,               labeltop=True,               labelright=True              )plt.show()

(8)隐藏边框+设置坐标轴相交位置

x1 = np.linspace(0.0, 5.0, 100)y1 = np.cos(2 * np.pi * x1) * np.exp(-x1)fig = plt.figure()axes = fig.add_subplot(1, 1, 1)axes.plot(x1,y1)axes.spines['top'].set_color('none')axes.spines['right'].set_color('none')axes.spines["bottom"].set_position(("data", 0))axes.spines["left"].set_position(("data", 0))

(9)时间日期刻度

import matplotlib.pyplot as pltimport matplotlib.dates as mdatesfrom datetime import datetimefrom matplotlib.ticker import MultipleLocator, FormatStrFormatter

#销售数据# dates=[20200101,20200201,20200301,20200401]dates=[20200101,20200102,20200103,20200104]y=[100,120.1,90.6,110]#将dates改成日期格式x= [datetime.strptime(str(d), '%Y%m%d').date() for d in dates]

#figure布局fig, axes = plt.subplots(1, 2, figsize=(15, 2), tight_layout=True)

axes[0].plot(x,y)#设置x轴主刻度格式days_loc = mdates.DayLocator()        #主刻度为每天axes[0].xaxis.set_major_locator(days_loc)     #设置主刻度axes[0].xaxis.set_major_formatter(mdates.DateFormatter('%Y年%m月%d日'))

#设置副刻度格式# hoursLoc = mpl.dates.HourLocator(interval=6) # 每六小时显示刻度,但是未必是6的整数倍hoursLoc = mpl.dates.HourLocator(byhour=[6, 12, 18, 24]) # 手动指定需要显示的副刻度axes[0].xaxis.set_minor_locator(hoursLoc)axes[0].xaxis.set_minor_formatter(mdates.DateFormatter('%H'))  # 如果副刻度不需要显示,注释这行

axes[0].tick_params(pad=15)  #参数pad用于设置刻度线与标签间的距离

#销售数据dates=[20200101,20200201,20200301,20200401]y=[100,120.1,90.6,110]#将dates改成日期格式x= [datetime.strptime(str(d), '%Y%m%d').date() for d in dates]

axes[1].plot(x,y)#设置x轴主刻度格式months_loc = mpl.dates.MonthLocator()  # 主刻度以月为单位axes[1].xaxis.set_major_locator(months_loc)     #设置主刻度axes[1].xaxis.set_major_formatter(mdates.DateFormatter('%Y年%m月%d日'))

#设置副刻度格式days_loc = mpl.dates.DayLocator(interval=10)  # 每10个单位长度显示一次副刻度,这种方法比上面的方法简单,但是未必是整数倍或对齐主刻度axes[1].xaxis.set_minor_locator(days_loc)axes[1].xaxis.set_minor_formatter(mdates.DateFormatter('%d'))  # 如果副刻度不需要显示,注释这行

axes[1].tick_params(pad=20)  #参数pad用于设置刻度线与标签间的距离

plt.show()

除了上述示例中使用到的DayLocator、MonthLocator、HourLocator外,matplotlib提供了WeekdayLocator、YearLocator等几个类对周、年进行设置。

4 总结

本文提供了许多matplotlib作图过程中在文本、坐标轴设置上可能会遇上的场景示例,供参考使用。在本文撰写过程中也发现,对于文本和坐标轴的设置多种多样,就算是对同一元素实现同一效果的设置方法也有多种,本文只是例举的示例了一小部分。对于注释这类文本,本来也想说一说,但是感觉注释本就不太常用,且本文本身写的也有些乱,就不在继续添乱了。

作者:奥辰 Github:https://github.com/ChenHuabin321

博客:https://www.cnblogs.com/chenhuabin

加入机器学习微信群请后台回复【入群】

阅后点在看,养成好习惯 

matplotlib 旋转刻度_Matplotlib数据可视化:文本与坐标轴相关推荐

  1. c#split方法拆分为数据_Dexplot:基于pandas,比matplotlib更简单的数据可视化和数据分析工具...

    Dexplot:建议准备学matplotlib和seaborn的数据可视化新手或者数据可视化爱好者食用 适用于长数据 比如网站用户留言的统计 特色是不用matplotlib 而用pandas导入数据( ...

  2. Python: 除matplotlib外还有哪些数据可视化库?

    Python: 除matplotlib外还有哪些数据可视化库? matplotlib算是python比较底层的可视化库,可定制性强.图表资源丰富.简单易用.达到出版质量级别. 其它的可视化库诸如: s ...

  3. matplotlib 标签_matplotlib数据可视化基础设置

    matplotlib数据可视化基础 图形在jupyter notebook中显示图形 % # 中文和负号的正常显示 #plt.rcParams['font.sans-serif'] = ['Micro ...

  4. Matplotlib课程–学习Python数据可视化

    Learn the basics of Matplotlib in this crash course tutorial. Matplotlib is an amazing data visualiz ...

  5. echarts 折线图 设置y轴最小刻度_数据可视化—Echarts图表应用

    <错误>郑愁予 我打江南走过, 那等在季节里的容颜如莲花的开落,东风不来,三月的柳絮不飞.你的心如小小寂寞的城,恰若青石的街道向晚.蛩音不响,三月的春帷不揭,你的心是小小的窗扉紧掩.我达达 ...

  6. matplotlib 柱状图_Matplotlib数据可视化:柱状图与直方图

    ↑↑点击上方蓝字,回复资料,嘿嘿,10个G的惊喜 柱状图和直方图是两种非常类似的统计图,区别在于: 直方图展示数据的分布,柱状图比较数据的大小. 直方图X轴为定量数据,柱状图X轴为分类数据.因此,直方 ...

  7. 没数据时y轴不显示_Matplotlib数据可视化

    1.Matplotlib介绍 什么是Matplotlib Matplotlib是一个Python的绘图库,它可与 NumPy 一起使用,可以代替M Matplotlib安装 由于Matplotlib是 ...

  8. 用Python+matplotlib足球运动员的射门数据可视化(绘制散点图)

    射门数据的可视化,本质上就是散点图,只是点的大小按期望进球值(预测进球概率)变化,提高了直观性和可视性. 一.https://understat.com联赛数据网 足球运动员的射门数据来自https: ...

  9. matplotlib模块数据可视化-设置次坐标轴

    1 次坐标轴简述 次坐标轴就是在一个画布上绘制两个图形时,两个图形的共用一个坐标轴,另外一个坐标轴不同,但是又想让两个图在一个画布上显示,设置次坐标轴,另一个轴分开显示,刻度不同. 2 共用x轴,设计 ...

最新文章

  1. javascript实现的有缩略图功能的幻灯片切换效果
  2. 解决 .net core 中 nuget 包版本冲突问题
  3. Java基础(三)面向对象(下)
  4. ReactiveCocoa个人记录
  5. 剑指offer: 不用加减乘除做加法
  6. 新学期,对同学们的要求和期望
  7. iOS自定义SearchBar样式
  8. python主线程执行回调函数_Python并发编程06 /阻塞、异步调用/同步调用、异步回调函数、线程queue、事件event、协程...
  9. 2003 445端口关闭方式
  10. linux日志过大怎么查看,Linux查看日志常用命令
  11. android怎实现拼图功能,基于Android的趣味拼图的实现
  12. BZOJ 2101: [Usaco2010 Dec]Treasure Chest 藏宝箱( dp )
  13. Vue.js写一个本地网址导航网站
  14. 将家人从Gmail,Thunderbird,Outlook等迁移到Google Apps:权威指南
  15. Java仿QQ聊天系统Eclipse+MySql实现
  16. 用IE点击html页面用谷歌打开,如何在电脑中使用谷歌浏览器打开不兼容的网页
  17. 『清华ERNIE』 与 『百度ERNIE』 的爱恨情仇
  18. DSP期末复习核心考点
  19. Ubuntu在中国的展望
  20. Python replace() 方法

热门文章

  1. iOS开发之本地通知UILocalNotification
  2. 2019\Province_C_C++_B\试题F-特别数的和
  3. 看完这篇,你就知道Python生成器是什么
  4. pip通过阿里源安装
  5. 计算机视觉之OpenCV教程 ---Mat类基础(一)
  6. 【机器视觉】Qt集成Halcon开发环境详解(二)
  7. 【Linux】一步一步学Linux——cut命令(44)
  8. 【Oracle】Redhat6.5环境下安装oracle11G R2
  9. 【Http协议】深入理解HTTP协议
  10. vue 版本发布 在线跟新用户操作解决方案_Vue3.0正式发布,本次发布所有总结,一起看看!【附在线视频】...