matplotlib 图表组成元素

在一个图像输出窗口中,底层是一个 Figure 实例,我们通常称之为画布,包含了一些可见和不可见的元素。

在画布上作出图形,这些图形是 Axes 实例,Axes 实例几乎包含了我们需要用到的 matplotlib 组成元素,例如坐标轴、刻度、标签、线和标记等。

import matplotlib.pyplot as plt
import numpy as np
from matplotlib import cm as cm
# 定义数据
x = np.linspace(0.5, 3.5, 100)
y = np.sin(x)
y1 = np.random.randn(100)
# 设置画布(figure)大小
plt.figure(figsize=(12, 9))
# 散点图
plt.scatter(x, y1, c="0.25", label="scatter figure")
# 普通图
plt.plot(x, y, ls="--", lw=2, label="plot figure")
# 一些清理(移除图表垃圾)
# 关闭上面和右面脊柱(spine),gca 解释为 get current axes
for spine in plt.gca().spines.keys():
    if spine == "top" or spine == "right":
        plt.gca().spines[spine].set_color("none")
        
# 开启 x 轴的底部 ticks
plt.gca().xaxis.set_ticks_position("bottom")
# 设置底部的 tick_line 位置
xticks = list(np.linspace(0.0, 3.5, 8))
xticks.append(3.8)
plt.xticks(xticks, xticks)  # 刻度位置和标签
# 开启 y 轴的左 ticks
plt.gca().yaxis.set_ticks_position("left")
# 设置左面的 tick_line 位置
# 设置 x,y 轴限制
plt.xlim(0.0, 4.0)
plt.ylim(-3.0, 3.0)
# 设置轴标签
plt.xlabel("x_axis")
plt.ylabel("y_axis")
# 设置 x,y 轴网格
plt.grid(True, ls=":", color="r")
# 添加水平线
plt.axhline(y=0.0, c="r", ls="--", lw=2)
# 沿着 x 轴添加垂直范围
plt.axvspan(xmin=1.0, xmax=2.0, facecolor="y", alpha=.3)
# 设置注释信息
plt.annotate("maximum", xy=(np.pi/2, 1.0), xytext=((np.pi/2)+0.15, 1.5), weight="bold", 
            color="r", arrowprops=dict(arrowstyle="->", connectionstyle="arc3", color="r"))
plt.annotate("spines", xy=(0.75, -3), xytext=(0.35, -2.25), weight="bold", color="b", 
            arrowprops=dict(arrowstyle="->", connectionstyle="arc3", color="b"))
plt.annotate("", xy=(0, -2.78), xytext=(0.4, -2.32), 
            arrowprops=dict(arrowstyle="->", connectionstyle="arc3", color="b"))
plt.annotate("", xy=(3.8, -2.98), xytext=(3.9, -2.70),
            arrowprops=dict(arrowstyle="->", connectionstyle="arc3", color="b"))
# 设置文本信息
plt.text(3.9, -2.70, "'|' is tickline", weight="bold", color="b")
plt.text(3.9, -2.95, "3.8 is ticklabel", weight="bold", color="b")
# 设置标题
plt.title("structure of matplotlib", fontsize=16)
# 设置图例
plt.legend(loc="upper left")
plt.show()

来源

matplotlib 实践

posted @ 2022-09-06 15:47  Hiidiot  阅读(105)  评论(0编辑  收藏  举报