matplotlib如何查看画布大小/坐标轴保留2位小数点/全网最详细的坐标轴改科学计数法说明

matplotlib如何查看画布大小

网上很多都是教你如何设置画布大小,但如果我们画了一个图,需要查看这个图的画布大小应该怎么写呢

import matplotlib
import matplotlib.pyplot as plt
import numpy as np

xpoints = np.array([1,2,3])
ypoints = np.array([0.42382342059442346,0.5141371943738949,0.5772575908107767])
plt.plot(xpoints,ypoints, marker='^')
plt.ylabel("y轴")
plt.xlabel("x轴")
# 设置y轴范围
plt.ylim((0, 1))
plt.xticks([1,2,3])
plt.yticks([0.0,0.25,0.5,0.75,1.0])
plt.title("Example")
# 画网格线
plt.grid()
# 绘制图例
plt.legend(['aaa'])
# 打印画布大小,一般默认[6.4, 4.8]
print(plt.rcParams["figure.figsize"])
plt.show()

坐标轴保留2位小数点

首先我们要知道“plt”和“ax”是什么:
注意,当我说“plt”时,它并不存在于Matplotlib库中。它之所以被称为“plt”,是因为大多数Python程序员喜欢导入Matplotlib并创建一个名为“plt”的别名,如下:

import matplotlib.pyplot as plt

当我们使用plt时:
在这里插入图片描述

  • 将生成一个figure对象(绿色框)
  • Axes对象是通过绘制的折线图(红色框)隐式生成的
  • 图中的所有元素(如x和y轴)都在Axes对象中呈现(蓝色框)

figure就像一张纸,axes就像把这张纸分成多个部分的一个单元格

当我们只想绘制一个图形时,没有必要“绘制”单元格,可以直接使用plt.plot()。但当我们想在一个图中绘制多个图时,必须使用axes。
在pyplot模块中,许多函数都是对当前的Figure或Axes对象进行处理,网上对于保留小数点的操作也大多是这样,不适用使用plt的情况:

from matplotlib.ticker import MultipleLocator,FormatStrFormatter
import matplotlib.ticker as mtick
ax.yaxis.set_major_formatter(mtick.FormatStrFormatter('%.2f'))

如果想要在plt情况使用,需要多加一句ax = plt.gca()

from matplotlib.ticker import MultipleLocator,FormatStrFormatter
import matplotlib.ticker as mtick
# plt.plot()实际上会通过plt.gca()获得当前的Axes对象ax,然后再调用ax.plot()方法实现真正的绘图
ax = plt.gca()
ax.yaxis.set_major_formatter(mtick.FormatStrFormatter('%.2f'))

其实就是我们通过plt.gca()获得了当前图表的子图,在此基础上完成坐标轴保留2位小数点的设置。

坐标轴改科学计数法

1.6 ∗ 1 0 6 的写法: 1.6*10^{6}的写法: 1.6106的写法:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import FuncFormatter
x=[1,2,3,4,5,6]
y=np.linspace(1,9000000,6)
plt.plot(x,y)
#设置y轴为科学计数法显示
def formatnum(x, pos):
    return '%.2f×10$^{6}$' % (x/1e6)
formatter = FuncFormatter(formatnum)
plt.gca().yaxis.set_major_formatter(formatter)
plt.yticks(np.linspace(1,9.5e6,9))
plt.xlabel('x')
plt.ylabel('y')
plt.show()

如果需要写计算机上的科学计数法
1.6 ∗ e − 2 1.6* e-2 1.6e2
该怎么改代码?

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import FuncFormatter

xpoints = np.array([1,2,3])
ypoints1 = np.array([0.00157,0.00213,0.00255])
plt.ylim([0, 0.01])
plt.plot(x,y)
def formatnum(x, pos):
    # 表示保留3位小数点,-2为e的次方数,x的值乘以10的2次方就可以转换为科学计数法的值
    return '$%.3fe-2$' % (x*100)
formatter = FuncFormatter(formatnum)
plt.gca().yaxis.set_major_formatter(formatter)
# 表示y轴范围从0到0.01,分成9个刻度
plt.yticks(np.linspace(0,0.01,9))
plt.ylim([0, 0.01])
plt.xlabel('x')
plt.ylabel('y')
plt.show()
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐