plt.figure中设置及调整xlabel、ylabel位置、字体大小和标签方向,以及X轴刻度标签位置、大小

本文详细介绍了如何使用Matplotlib库在Python中调整图表的xlabel、ylabel、刻度标签、线条粗细以及坐标轴位置,包括字体大小、旋转、对齐和间距的设置,以及如何处理密集数据的X轴刻度问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们拿一个最简单的plt绘图案例举例说明:
(存贴自用)

import matplotlib.pyplot as plt
y=[1,6,5,2,7,1,4,3,6,2]
x=[m for m in range(len(y))]
plt.figure()
plt.plot(x,y)#对于x从零开始时,plt.plot(y)效果是一样的
plt.show()

在这里插入图片描述

1、xlabel、ylabel的调整

label的创建

对于上面那幅极致简单的图片来说,缺少必要的X轴Y轴说明,我们可以使用label参数设置其x、y轴的标签:

import matplotlib.pyplot as plt
y=[1,6,5,2,7,1,4,3,6,2]
x=[m for m in range(len(y))]
plt.figure()
plt.xlabel('Time')
plt.ylabel('Cost')
plt.plot(x,y)
plt.show()

在这里插入图片描述

label的大小

这下似乎看起来可以了,已经可以让别人知道X轴Y轴表示的啥意思了,但是X轴Y轴标签太小或太大怎么办?plt提供了参数:

import matplotlib.pyplot as plt
y=[1,6,5,2,7,1,4,3,6,2]
x=[m for m in range(len(y))]
plt.figure()
plt.xlabel('Time',fontsize=20)#直接调整fontsize中的值就可以了
plt.ylabel('Cost',fontsize=20)
plt.plot(x,y)
plt.show()

在这里插入图片描述
像我这样将fontszie设置为20,X轴标签似乎有点太极限贴近下边界了,我们可以适当调整figure大小:

import matplotlib.pyplot as plt
y=[1,6,5,2,7,1,4,3,6,2]
x=[m for m in range(len(y))]
plt.figure(figsize=(15,8))#figsize控制figure大小
plt.xlabel('Time',fontsize=20)
plt.ylabel('Cost',fontsize=20)
plt.plot(x,y)
plt.show()

在这里插入图片描述

xylabel的位置与方向的调整

import matplotlib.pyplot as plt
y=[1,6,5,2,7,1,4,3,6,2]
x=[m for m in range(len(y))]
plt.figure(figsize=(15,8))
plt.xlabel('Time',fontsize=20, rotation=45, ha='right', va='top')
plt.ylabel('Cost',fontsize=20, rotation=90, ha='center', va='bottom')
plt.plot(x,y)
plt.show()
  1. rotation表示顺时针旋转的角度,记得旋转中心是字符串的形状中心。
    你就把label看做一条向量,中心点的位置就是旋转中心,指向label末尾字符,X轴初始默认为0,Y轴默认为90,想要什么角度转就可以了。
  2. ha的参数选择有:‘center’, ‘right’, ‘left’。
    表示水平方向的位置,这个水平方向指的是平行坐标轴的方向,即Y轴的ha表示标签在平行于y轴方向上在左、右或中间哪个位置,坐标轴原点为左。
  3. va的参数选择有’top’, ‘bottom’, ‘center’, ‘baseline’,‘center_baseline’。
    表示垂直方向的位置,同样的这里的垂直方向指的也是垂直于坐标轴的方向,靠近坐标轴称top,远离坐标轴接近figure边界称bottom。

在这里插入图片描述
如果你想精确一点坐标轴标签距离坐标轴的位置,你可以借助pad参数调整:

import matplotlib.pyplot as plt
y=[1,6,5,2,7,1,4,3,6,2]
x=[m for m in range(len(y))]
plt.figure(figsize=(15,8))
plt.xlabel('Time',fontsize=20, rotation=45, ha='right', va='top')
plt.ylabel('Cost',fontsize=20, rotation=90, ha='center', va='bottom',labelpad=50)
plt.plot(x,y)
plt.show()

labelpad表示标签距离坐标轴的距离,越远离越大
在这里插入图片描述

2、X轴刻度标签的调整

一般来说,我们只需要使用plt.plot(x,y)就能把两个轴的刻度部署到对应轴上了,但是我们可能会有一些特殊的需求或者调整。
拿个例子说明一下X轴刻度标签的调整,让X轴显示具体时间:

import matplotlib.pyplot as plt
import datetime
y=[1,6,5,2,7,1,4,3,6,2]
x=[m for m in range(len(y))]
dtime=[]
for i in range(len(y)):
    time_format = datetime.datetime.fromtimestamp(1667663400+i*86400)
    dtime.append(str(time_format)[:10])
plt.figure(figsize=(15,8))
plt.xlabel('Time',fontsize=20, rotation=0, ha='right', va='top',labelpad=15)
plt.ylabel('Cost',fontsize=20, rotation=90, ha='center', va='bottom',labelpad=50)
plt.plot(dtime,y)
plt.show()

在这里插入图片描述
这面临一个问题,如果我的点太密,X轴显示的刻度标签就会堆叠起来,就需要进行X轴刻度标签的调整:
在这里插入图片描述

  1. 第一种方法
    让刻度值均匀显示:
import matplotlib.pyplot as plt
import datetime
from matplotlib.ticker import MultipleLocator
y=[1,6,5,2,7,1,4,3,6,2]
x=[m for m in range(len(y))]
dtime=[]
for i in range(len(y)):
    time_format = datetime.datetime.fromtimestamp(1667663400+i*86400)
    dtime.append(str(time_format)[:])
plt.figure(figsize=(15,8))
plt.xlabel('Time',fontsize=20, rotation=0, ha='right', va='top',labelpad=15)
plt.ylabel('Cost',fontsize=20, rotation=90, ha='center', va='bottom',labelpad=50)
x_major_locator = MultipleLocator(len(dtime) // 5)#此处最后的数字“5”为欲显示刻度数量,会均匀地显示5个刻度
ax = plt.gca()
ax.xaxis.set_major_locator(x_major_locator)
# xindex=[2,6,8]
# plt.xticks(xindex, [dtime[m] for m in xindex])
plt.plot(dtime,y)#这里X轴对应的是dtime
plt.show()

在这里插入图片描述

  1. 第二种方法
    可以自己设置要显示的刻度
import matplotlib.pyplot as plt
import datetime
y=[1,6,5,2,7,1,4,3,6,2]
x=[m for m in range(len(y))]
dtime=[]
for i in range(len(y)):
    time_format = datetime.datetime.fromtimestamp(1667663400+i*86400)
    dtime.append(str(time_format)[:])
plt.figure(figsize=(15,8))
plt.xlabel('Time',fontsize=20, rotation=0, ha='right', va='top',labelpad=15)
plt.ylabel('Cost',fontsize=20, rotation=90, ha='center', va='bottom',labelpad=50)
xindex=[0,2,4,6,8]
plt.xticks(xindex, [dtime[m] for m in xindex])#自由显示刻度,xindex存一下要显示的刻度从0开始的下标即可
plt.plot(range(len(dtime)),y)#这里X轴用位置替代
plt.show()

在这里插入图片描述

坐标轴及折线线条的粗细调整

关于坐标轴的调整

在这里要搞清楚一件事,X轴与figure下边轴、Y轴与figure左边轴他不是一码事,举例来说我们要加深X轴Y轴的粗细:

import matplotlib.pyplot as plt
import datetime
from matplotlib.ticker import MultipleLocator
y=[1,6,5,2,7,1,4,3,6,2]
x=[m for m in range(len(y))]
dtime=[]
for i in range(len(y)):
    time_format = datetime.datetime.fromtimestamp(1667663400+i*86400)
    dtime.append(str(time_format)[:])
plt.figure(figsize=(15,8))
plt.xlabel('Time',fontsize=20, rotation=0, ha='right', va='top',labelpad=15)
plt.ylabel('Cost',fontsize=20, rotation=90, ha='center', va='bottom',labelpad=50)
x_major_locator = MultipleLocator(len(dtime) // 5)
ax = plt.gca()
ax.xaxis.set_major_locator(x_major_locator)
# xindex=[2,6,8]
# plt.xticks(xindex, [dtime[m] for m in xindex])
plt.axhline(linewidth=5, color='black')  # X 轴线条粗细
plt.axvline(linewidth=5, color='black')  # Y 轴线条粗细
plt.plot(dtime,y)
plt.show()

在这里插入图片描述
很容易明白,此时直接用axhline捕获到的是0水平轴,不是我们理解上的X轴,解决办法有两条:
一是顺便调整原点位置,让0,0或者图像起始点就是原点:

import matplotlib.pyplot as plt
import datetime
from matplotlib.ticker import MultipleLocator
y=[1,6,5,2,7,1,4,3,6,2]
x=[m for m in range(len(y))]
dtime=[]
for i in range(len(y)):
    time_format = datetime.datetime.fromtimestamp(1667663400+i*86400)
    dtime.append(str(time_format)[:])
plt.figure(figsize=(15,8))
plt.xlabel('Time',fontsize=20, rotation=0, ha='right', va='top',labelpad=15)
plt.ylabel('Cost',fontsize=20, rotation=90, ha='center', va='bottom',labelpad=50)
x_major_locator = MultipleLocator(len(dtime) // 5)
ax = plt.gca()
ax.xaxis.set_major_locator(x_major_locator)
# xindex=[2,6,8]
# plt.xticks(xindex, [dtime[m] for m in xindex])
plt.xlim(0,len(dtime))
plt.ylim(0,max(y))
plt.axhline(linewidth=5, color='black')  # X 轴线条粗细
plt.axvline(linewidth=5, color='black')  # Y 轴线条粗细
plt.plot(dtime,y)
plt.show()

在这里插入图片描述
二是不动原点,直接加深figure边轴

import matplotlib.pyplot as plt
import datetime
from matplotlib.ticker import MultipleLocator
y=[1,6,5,2,7,1,4,3,6,2]
x=[m for m in range(len(y))]
dtime=[]
for i in range(len(y)):
    time_format = datetime.datetime.fromtimestamp(1667663400+i*86400)
    dtime.append(str(time_format)[:])
plt.figure(figsize=(15,8))
plt.xlabel('Time',fontsize=20, rotation=0, ha='right', va='top',labelpad=15)
plt.ylabel('Cost',fontsize=20, rotation=90, ha='center', va='bottom',labelpad=50)
x_major_locator = MultipleLocator(len(dtime) // 5)
ax = plt.gca()
ax.xaxis.set_major_locator(x_major_locator)
# xindex=[2,6,8]
# plt.xticks(xindex, [dtime[m] for m in xindex])
# plt.xlim(0,len(dtime))
# plt.ylim(0,max(y))
# plt.axhline(linewidth=5, color='black')  # X 轴线条粗细
# plt.axvline(linewidth=5, color='black')  # Y 轴线条粗细
left_spine = plt.gca().spines['left']# 获取左边轴对象
left_spine.set_linewidth(5)# 设置线条粗细
left_spine = plt.gca().spines['bottom']
left_spine.set_linewidth(5)
plt.plot(dtime,y)
plt.show()

在这里插入图片描述
从这里也可以得到把边轴隐藏掉的一个方法,直接设置其线条粗细为0就好:

left_spine = plt.gca().spines['top']
left_spine.set_linewidth(0)
left_spine = plt.gca().spines['right']
left_spine.set_linewidth(0)

在这里插入图片描述

折线线条的粗细调整

plot的时候用linewidth参数调整一下就好

plt.plot(dtime,y,linewidth=5)

在这里插入图片描述

总代码

import matplotlib.pyplot as plt
import datetime
from matplotlib.ticker import MultipleLocator
y=[1,6,5,2,7,1,4,3,6,2]
x=[m for m in range(len(y))]
dtime=[]
for i in range(len(y)):
    time_format = datetime.datetime.fromtimestamp(1667663400+i*86400)
    dtime.append(str(time_format)[:])
plt.figure(figsize=(15,8))
plt.xlabel('Time',fontsize=20, rotation=0, ha='right', va='top',labelpad=15)
plt.ylabel('Cost',fontsize=20, rotation=90, ha='center', va='bottom',labelpad=50)
x_major_locator = MultipleLocator(len(dtime) // 5)
ax = plt.gca()
ax.xaxis.set_major_locator(x_major_locator)
# xindex=[2,6,8]
# plt.xticks(xindex, [dtime[m] for m in xindex])
# plt.xlim(0,len(dtime))
# plt.ylim(0,max(y))
# plt.axhline(linewidth=5, color='black')  # X 轴线条粗细
# plt.axvline(linewidth=5, color='black')  # Y 轴线条粗细
left_spine = plt.gca().spines['left']# 获取左边轴对象
left_spine.set_linewidth(5)# 设置线条粗细
left_spine = plt.gca().spines['bottom']
left_spine.set_linewidth(5)
left_spine = plt.gca().spines['top']
left_spine.set_linewidth(0)
left_spine = plt.gca().spines['right']
left_spine.set_linewidth(0)
plt.plot(dtime,y,linewidth=5)
# plt.show()
plt.savefig('E:/CSDN/案例.png')


注意一个点,figsize的大小如果超出show的显示大小限制,会看不出来实际大小,只会铺满全屏,所以用savefig存一下才能看出你实际调整的效果,用dpi参数可以调整分辨率,不过太大了也不好,得放大了才看得清楚。
待补充。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值