<淮安网>:Matplotlib『‘数据’可视化』(3):【《文本与》】轴

2020-03-02 66 views 0

扫一扫用手机浏览

 

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

这里所说的(“文”本) 是指在使用[matplotlib「作《图》过程中通过代码的方式」往《图》中添加的各种文字,包括figure「『「标题」』」、axes「『「标题」』」、坐标轴标签、坐标“轴刻度”标签、注释、{普通}(“文”本)等。轴【{〖“设”置〗}】指的是对“与”坐标轴相关的的元素的【{〖“设”置〗}】,例如显示范围、刻度、刻度标签等。

In [1]:
from matplotlib import pyplot as plt
import numpy as np
import matplotlib as mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']  # 中文字体支持
 

1 「『「标题」』」¶

 

(1)figure「『「标题」』」“与”axes「『「标题」』」

In [2]:
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)字体【{〖“设”置〗}】

In [3]:
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)【{〖“设”置〗}】水平距离

In [4]:
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)【{〖“设”置〗}】垂直距离

In [5]:
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()
  Sunbet,进入申博Sunbet官网  第1张  

2 坐标轴标签¶

 

(1)添加坐标轴标签

In [6]:
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()
  Sunbet,进入申博Sunbet官网  第2张  

(2)“与”坐标轴间距

In [7]:
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()
  Sunbet,进入申博Sunbet官网  第3张  

(3)“<( 位置[)>【{〖“设”置〗}】”

In [8]:
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()
  Sunbet,进入申博Sunbet官网  第4张  

(4)字体【{〖“设”置〗}】

In [9]:
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()
  Sunbet,进入申博Sunbet官网  第5张  

3 ‘刻度和刻度标签’¶

 

(1)【【{〖“设”置〗}】刻度标签】

In [10]:
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()
  Sunbet,进入申博Sunbet官网  第6张  

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

In [11]:
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()
  Sunbet,进入申博Sunbet官网  第7张  

(3)刻度数量“与”格式

In [12]:
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()
  Sunbet,进入申博Sunbet官网  第8张  

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

In [13]:
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()
  Sunbet,进入申博Sunbet官网  第9张  

(5)单独【{〖“设”置〗}】某一刻度标签样式

In [14]:
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()
  Sunbet,进入申博Sunbet官网  第10张  

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

In [15]:
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()
  Sunbet,进入申博Sunbet官网  第11张  

(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的〖值为〗布尔值,分别代表【{〖“设”置〗}】绘《图》区四个边框线上的刻度线标签是否显示
In [16]:
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()
  Sunbet,进入申博Sunbet官网  第12张  

(8)「隐藏边框」+【{〖“设”置〗}】坐标轴相交<( 位置[)>

In [17]:
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))
  Sunbet,进入申博Sunbet官网  第13张  

(9)<<时间>>「日」期刻度

In [18]:
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
from datetime import datetime
from 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()
  Sunbet,进入申博Sunbet官网  第14张  

“除了上述示例中使用到的”DayLocator、MonthLocator、HourLocator「外」,matplotlib{提供了}WeekdayLocator、YearLocator等几个类对周、『(年)』进行【{〖“设”置〗}】。

 

4 『总结』¶

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

,

阳光在线

阳光在线www.sssmobilesss.com(原诚信在线)现已开放阳光在线手机版下载。{阳光在线游戏公平}、公开、公正,(用实力赢取信)誉。

Sunbet网站内容转载自互联网,如有侵权,联系Sunbet 删除。

本文链接地址:http://www.shfkgcjxyxgs.com/post/1201.html

相关文章

发表评论