绘制一个简单的图
plt.style.use('Solarize_Light2')
plt.ylabel("squares")
plt.xlabel("kadsjfk")
plt.plot(x, y)
plt.show() # pycharm中需要使用show来显示图形
style的设置
绘制不同颜色
x = np.linspace(0, 2 * np.pi, 100)
offsets = np.linspace(0, np.pi, 5) # 偏移量
colors = ["blue", "g", "r", "yellow", "pink"]
for offset, color in zip(offsets, colors):
plt.plot(x, np.sin(x - offset), color=color)
调整线条风格
x = np.linspace(0, 10, 11)
offsets = list(range(8))
linstyles = ["solid", "dashed", "dashdot", "dotted", "-", "--", "-.", ":"]
for offset, linstyle in zip(offsets, linstyles):
plt.plot(x, x + offset, linestyle=linstyle)
调整线条宽度
x = np.linspace(0, 10, 11)
offsets = list(range(0, 12, 3))
linewidths = [i * 2 for i in range(1, 5)]
for offset, linewidth in zip(offsets, linewidths):
plt.plot(x, x + offset, linewidth=linewidth)
调整数据点标记
x = np.linspace(0, 10, 11)
offsets = list(range(0, 12, 3))
markers = ["*", "+", "o", "s"]
for offset, marker in zip(offsets, markers):
plt.plot(x, x + offset, marker=marker)
同时设置上述三种属性的三联设置法
x = np.linspace(0, 10, 11)
offsets = list(range(0, 8, 2))
color_marker_linestyles = ["g*-", "b+--", "ko-.", "rs:"]
for offset, color_marker_linestyle in zip(offsets, color_marker_linestyles):
plt.plot(x, x + offset, color_marker_linestyle)
调整坐标轴
坐标轴的数据范围
# 方法1
plt.xlim(-1, 7)
plt.ylim(-1.5, 1.5)
# 方法2
plt.axis([-2, 8, -1.5, 1.5])
设置风格
plt.axis("tight") # 紧凑风格
plt.axis("equal") # 扁平风格
......
对数坐标
plt.xscale("log")
具体的设置坐标轴
# 设置坐标轴为0-11, 步长为11
x = np.linspace(0, 10, 100)
plt.xticks(np.arange(0, 12, step=1))
plt.yticks(np.arange(0, 110, step=10)
plt.plot(x, x**2)
设置刻度样式
plt.tick_params(axis="both", labelsize=15)
设置图形标签
x = np.linspace(0, 2 * np.pi, 100)
plt.title("fuck", fontsize=20) # 图标题
plt.xlabel("x", fontsize=15) # x轴名称
plt.ylabel("sin(x)", fontsize=15) # y轴名称
plt.plot(x, np.sin(x))
绘制图例
x = np.linspace(0, 2 * np.pi, 100)
plt.plot(x, np.sin(x), "b-", label="Sin")
plt.plot(x, np.cos(x), "r--", label="Cos")
plt.legend() # 显示图例
修改图例
plt.ylim(-1.5, 2)
plt.plot(x, np.sin(x), "b-", label="Sin")
plt.plot(x, np.cos(x), "r--", label="Cos")
plt.legend(loc="upper center", frameon=True, fontsize=15) # 显示图例, frameon表示加外边框
添加文字和箭头
x = np.linspace(0, 2 * np.pi, 100)
plt.text(3.5, 0.5, "fuck", fontsize=15) # 在(3.5, 0.5)处写一个fuck
plt.annotate("fuck", xy=(1.5*np.pi, -1), xytext=(4.5, 0),
arrowprops=dict(facecolor='black', shrink=0.1)) # 绘制一个箭头:第二个参数表示指向的位置,xytext参数表示文字的位置
plt.plot(x, np.sin(x), "b-", label="Sin")
plt.plot(x, np.cos(x), "r--", label="Cos")
plt.legend() # 显示图例
散点图
简单散点图
x = np.linspace(0, 2 * np.pi, 20)
plt.scatter(x, np.sin(x), marker="o", s=30, c="r")
颜色, 形状, 透明度配置
# 注意,colors和size的大小必须和点的数量相同,才能完成一一对应的映射
x , y, colors, size = (np.random.rand(100) for i in range(4))
plt.scatter(x, y, c=colors, s=1000*size, cmap="viridis", alpha=0.3)
柱形图
x = np.arange(1, 6)
colors = ['red', 'blue', 'yellow', 'green', 'gray'] # 颜色序列
plt.bar(x, 2 * x, align="center", width=0.5, alpha=0.5, color=colors, edgecolor='red')
# x, y, 数据在柱子的位置, 柱子宽度, 柱子透明度, 柱子颜色, 外边线颜色
plt.xticks(x, ("G1", "G2", "G3", "G4", "G5")) # 替换x轴坐标值
plt.tick_params(axis="both", labelsize=13)
累加柱形图
x = np.arange(5)
y1 = np.random.randint(20, 30, size=5)
y2 = np.random.randint(20, 30, size=5)
plt.bar(x, y1, width=0.5, label="man") # 第一组正常画
plt.bar(x, y2, width=0.5, bottom=y1, label="women") # 第二组设置数据y1为bottom
plt.legend() # 显示图例
并列柱形图
x = np.arange(15)
y1 = x + 1
y2 = y1 + np.random.random(15) # 随机选15以内的一个数
plt.bar(x, y1, width=0.3, label="man")
plt.bar(x+0.3, y2, width=0.3, label='women') # 注意与第一个柱子错开x位置,依次画上去即可
plt.legend()
横向柱形图
x = ['g1', 'g2', 'g3', 'g4', 'g5']
y = 2 * np.arange(1, 6)
plt.barh(x, y, align='center', height=0.6, alpha=0.8, color='green', edgecolor='red')
# 使用barh函数,注意横向后,宽度变为height
多子图
绘制两行一列的多子图
def f(t):
return np.exp(-t) * np.cos(2 * np.pi * t)
t1 = np.arange(0.0, 5.0, 0.1)
t2 = np.arange(0.0, 5.0, 0.02)
plt.subplot(211) # 211表示两行一列多子图的第一个图
plt.plot(t1, f(t1), "bo-", markerfacecolor="r", markersize=5)
plt.title("A table")
plt.ylabel("fuck_A")
plt.subplot(212) # 212表示两行一列的多子图的第二个图
plt.plot(t2, np.cos(2 * np.pi * t2), "r--")
plt.xlabel("times")
plt.ylabel("fuck_B")
多行多列多子图
x = np.random.random(10) # 产生0~1的十个随机数
y = np.random.random(10)
plt.subplots_adjust(hspace=0.5, wspace=0.3) # 定义横向和纵向的间隔
plt.subplot(321)
plt.scatter(x, y, s=80, c="b", marker=">")
plt.subplot(322)
plt.scatter(x, y, s=80, c="g", marker="*")
plt.subplot(323)
plt.scatter(x, y, s=80, c="r", marker="s")
plt.subplot(324)
plt.scatter(x, y, s=80, c="c", marker="p")
plt.subplot(325)
plt.scatter(x, y, s=80, c="m", marker="+")
plt.subplot(326)
plt.scatter(x, y, s=80, c="y", marker="H")
不规则的多子图
def f(x):
return np.exp(-x) * np.cos(2 * np.pi * x)
x = np.arange(0.0, 3.0, 0.01)
grid = plt.GridSpec(2, 3, wspace=0.4, hspace=0.3) # 先在图上绘制一个2 * 3的网格
plt.subplot(grid[0,0]) # 占0, 0的位置
plt.plot(x, f(x))
plt.subplot(grid[0, 1:]) # 占第0行1列到最后的位置
plt.plot(x, f(x), "r--", lw=2)
plt.subplot(grid[1, :]) # 占第一行所有的位置
plt.plot(x, f(x), "g--", lw=3)