【matplotlib】20.其他图

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

#【matplotlib】20.其他图

2023.1.20

polt为点线图后面我们看看plt里面的其他图

20.1 Scatter 散点图

  • plt.scatter()
import matplotlib.pyplot as plt
import numpy as np

n =1024

x = np.random.normal(0,1,n)
y = np.random.normal(0,1,n)

# 颜色 这个应该是个tan值范围是R
T = np.arctan2(y,x)

#Scatter
plt.scatter(x,y, s=75, c=T, alpha=0.5)

# 设置幕布,上一节有讲

plt.xlim(-1.5,1.5)
plt.xticks(()) # 没有刻度

plt.ylim(-1.5,1.5)
plt.yticks(())

plt.show()

在这里插入图片描述

  • 我认为某个区域 坐标是类似的 所以tan就是类似的 所以颜色是类似的才会有这种过度颜色 并且颜色一块块的
  • c是color

20.2 Bar柱状图

  • plt.bar()
import matplotlib.pyplot as plt
import numpy as np

n = 12

# 数据准备
X = np.arange(n)
Y1 = np.random.uniform(0.5, 1.0, n)
Y2 = np.random.uniform(0.5, 1.0, n)

# 柱状图
plt.bar(X, +Y1, facecolor='#9999ff', edgecolor='white')
plt.bar(X, -Y2, facecolor='#ff9999', edgecolor='white')


# 柱状图上的文字
for x, y in zip(X, Y1):
    # ha: horizontal alignment
    # va: vertical alignment
    plt.text(x + 0.4, y + 0.05, '%.2f' % y, ha='center', va='bottom')


for x, y in zip(X, Y2):
    # ha: horizontal alignment
    # va: vertical alignment
    plt.text(x + 0.4, -y - 0.05, '%.2f' % y, ha='center', va='top')
    
# 窗口设置
plt.xlim(-.5, n)
plt.xticks(())
plt.ylim(-1.25, 1.25)
plt.yticks(())

plt.show()

在这里插入图片描述

  • np.random.uniform(0.5, 1.0, n)均匀分布https://blog.csdn.net/lemonxiaoxiao/article/details/109244755

    • 数值上下限就是0.5-1一共n个柱
  • edgecolor:图形边界

  • plt.text():图表上的数字

20.3 Contours 等高线图

  • plt.contourf():画等高图
  • plt.contour(画等高线
  • plt.clabel添加高度数字
  1. 数据准备

f ( x , y ) = ( 1 − x / 2 + x 5 + y 3 ) ∗ e ( − x 2 − y 2 ) f(x,y) = (1 - x / 2 + x^5 + y^3) * e^{(-x^2 -y^2)} f(x,y)=(1x/2+x5+y3)e(x2y2)

import matplotlib.pyplot as plt
import numpy as np

def f(x,y):
    # the height function
    return (1 - x / 2 + x**5 + y**3) * np.exp(-x**2 -y**2)

# 数据准备
n = 256
x = np.linspace(-3, 3, n)
y = np.linspace(-3, 3, n)
X,Y = np.meshgrid(x, y)

这是个3D图x,y和高度

  • 高度值使用一个 height function f(x,y)生成
  • x,y分布生成n=256个用meshgrid在二维平面中将每一个x和每一个y分别对应起来编织成栅格:

x,y和高度准备就绪

  1. 根据高度画图
  • plt.contourf(
# 根据高度画图
plt.contourf(X, Y, f(X, Y), 8, alpha=.75, cmap=plt.cm.hot)
<matplotlib.contour.QuadContourSet at 0x140d6f4e6d0>

在这里插入图片描述

  • 分成了八个颜色
  • f(X,Y) 的值对应到color map的暖色组中寻找对应颜色
  1. 绘制等高线
  • plt.contour函数划线
plt.contourf(X, Y, f(X, Y), 8, alpha=.75, cmap=plt.cm.hot)


# 绘制等高线
C = plt.contour(X, Y, f(X, Y), 8, colors='black', linewidth=.5)
C:\Users\YANG\AppData\Local\Temp\ipykernel_10368\4128262880.py:3: UserWarning: The following kwargs were not used by contour: 'linewidth'
  C = plt.contour(X, Y, f(X, Y), 8, colors='black', linewidth=.5)

在这里插入图片描述

  1. 添加高度数字
  • plt.clabel添加高度数字
plt.contourf(X, Y, f(X, Y), 8, alpha=.75, cmap=plt.cm.hot)


# 绘制等高线
C = plt.contour(X, Y, f(X, Y), 8, colors='black', linewidth=.5)

plt.clabel(C, inline=True, fontsize=10)
plt.xticks(())
plt.yticks(())
C:\Users\YANG\AppData\Local\Temp\ipykernel_10368\4170655076.py:5: UserWarning: The following kwargs were not used by contour: 'linewidth'
  C = plt.contour(X, Y, f(X, Y), 8, colors='black', linewidth=.5)





([], [])

在这里插入图片描述

  • inline控制是否将Label画在线里面

20.4 Image图片

Image图片 纯数字矩阵图

import matplotlib.pyplot as plt
import numpy as np

# 数据准备
a = np.array([0.313660827978, 0.365348418405, 0.423733120134,
              0.365348418405, 0.439599930621, 0.525083754405,
              0.423733120134, 0.525083754405, 0.651536351379]).reshape(3,3)

# 主图图像
plt.imshow(a, interpolation='nearest', cmap='bone')

#侧面色彩卡
plt.colorbar(shrink=.92)

plt.xticks(())
plt.yticks(())
plt.show()

在这里插入图片描述

  • 三行三列的格子a代表每一个值图像右边有一个注释白色代表值最大的地方颜色越深值越小。

  • cmap=plt.cmap.bone:cmap的参数,具有较高的黑-白成分的灰度色图用于对灰度图添加电子的视图

  • origin='lower':代表的就是选择的原点的位置。

  • 添加一个shrink参数使colorbar的长度变短为原来的92%

参考https://blog.csdn.net/a892573486/article/details/107542839

20.5 3D数据

  1. 进行 3D Plot 时除了导入 matplotlib 还要额外添加一个模块即 Axes3D 3D 坐标轴显示
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
  1. 打开一个窗口 看看形状
fig = plt.figure()
ax = Axes3D(fig)
C:\Users\YANG\AppData\Local\Temp\ipykernel_12732\2957860354.py:2: MatplotlibDeprecationWarning: Axes3D(fig) adding itself to the figure is deprecated since 3.4. Pass the keyword argument auto_add_to_figure=False and use fig.add_axes(ax) to suppress this warning. The default value of auto_add_to_figure will change to False in mpl3.5 and True values will no longer work in 3.6.  This is consistent with other Axes classes.
  ax = Axes3D(fig)

在这里插入图片描述

  1. 往3D图像里面添加数据
fig = plt.figure(figsize=(8,8))
ax = Axes3D(fig)
# X, Y value
X = np.arange(-4, 4, 0.25)
Y = np.arange(-4, 4, 0.25)
X, Y = np.meshgrid(X, Y)    # x-y 平面的网格前面有介绍也就是x,y对应起来

# 准备Z
R = np.sqrt(X ** 2 + Y ** 2)
# height value
Z = np.sin(R)

# 图像控制
ax.plot_surface(X, Y, Z, rstride=2, cstride=2, cmap=plt.get_cmap('rainbow'))

# 投影控制
ax.contourf(X, Y, Z, zdir='z', offset=-2, cmap=plt.get_cmap('rainbow'))
C:\Users\YANG\AppData\Local\Temp\ipykernel_12732\1111420424.py:2: MatplotlibDeprecationWarning: Axes3D(fig) adding itself to the figure is deprecated since 3.4. Pass the keyword argument auto_add_to_figure=False and use fig.add_axes(ax) to suppress this warning. The default value of auto_add_to_figure will change to False in mpl3.5 and True values will no longer work in 3.6.  This is consistent with other Axes classes.
  ax = Axes3D(fig)





<matplotlib.contour.QuadContourSet at 0x24b912f4a60>

在这里插入图片描述

  • rstride 和 cstride 分别代表 row 和 column 的跨度,数值越大那个一片颜色的面积越大

  • ax.plot_surface:图像控制

  • ax.contourf投影控制

    • zdir='z':控制往哪里投这事在XY平面上投
    • offset=-2控制投影平面在投影面的高度这里放到z=-2平面上了
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6