python画图

这段代码,主要体现了多个子图的绘制、3D离散图、3维刻度格式的修改以及做标签的修改。
特别是3维刻度修改,不同于2D可以直接使用
plt.xticks(fontproperties='Times New Roman', size=12) plt.yticks(fontproperties='Times New Roman', size=12)
3D的刻度修改需要借助matplotlib 的font_manager。

import pandas as pd
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import font_manager
import numpy as np
# 读取CSV文件
# path1 = r"E:\gesture_recognition\gesture_while_walking\c2_3m\zwx\zwx_1\log_data_2.csv"
# path2 = r"E:\gesture_recognition\gesture_while_walking\c2_3m\zwx\zwx_2\log_data_2.csv"
# path3 = r"E:\gesture_recognition\gesture_while_walking\c2_3m\zwx\zwx_3\log_data_2.csv"
# path4 = r"E:\gesture_recognition\gesture_while_walking\c2_3m\zwx\zwx_4\log_data_2.csv"
# path5 = r"E:\gesture_recognition\gesture_while_walking\c2_3m\zwx\zwx_5\log_data_2.csv"
# #

path1 = r"E:\ly\ly图\ly\ly\ly_1_1\log_data_2.csv"
path2 = r"E:\ly\ly图\ly\ly\ly_2_1\log_data_2.csv"
path3 = r"E:\ly\ly图\ly\ly\ly_3_1\log_data_2.csv"
path4 = r"E:\ly\ly图\zwx\zwx\zwx_4\log_data_2.csv"
path5 = r"E:\ly\ly图\ly\ly\ly_5_1\log_data_2.csv"

csv_files = [path1,path2,path3,path4,path5]

plt.subplots_adjust(wspace=0.5, hspace=0.2)

# fig, axs = plt.subplots(1, 5, figsize=(20, 4))
fig = plt.figure(figsize=(20, 4))

set_title = ["PL","PS","CR","UP","KO"]
i=0
for i, csv_file in enumerate(csv_files):

    data = np.loadtxt(csv_file, delimiter=",", skiprows=1)
    data = data[data[:, 3] < 4.5]
    data = data[data[:, 3] > 3.5]

    data = data[data[:, 4] < 2]
    data = data[data[:, 4] > -1]

    data = data[data[:, 2] < 1]
    data = data[data[:, 2] > -0.2]

# 提取x、y、z坐标数据
    x = data[:, 2]  # 第3列为x坐标
    y = data[:, 3]  # 第4列为y坐标
    z = data[:, 4]  # 第5列为z坐标
    # velocity = data.iloc[:, 5]  # 第6列为速度
    # frame = data.iloc[:, 0]  # 第6列为速度
    # print(x)
    # 创建三维坐标轴
    # ax = axs[i]
    ax = fig.add_subplot(1, 5, i+1, projection='3d')  # 用add_subplot创建3D子图
    # ax.xaxis.set_ticks([0.0,1.0,2.0,3.0,4.0])


    ax.set_frame_on(True)
    # ax.axis('off')

    # 为速度设置颜色映射
    # colors = velocity

    colors = 'blue'
    # 绘制点
    ax.scatter(x, y, z, c='b', marker='o')

    # 绘制点,设置颜色
    scatter = ax.scatter(x, y, z, c=colors, cmap='viridis', marker='o')

    # 设置子图标题
    ax.set_title(set_title[i],fontname="Times New Roman",fontsize=16)

    # # 设置颜色条
    # cbar = plt.colorbar(scatter)
    # cbar.set_label('velocity')

    # cax = fig.add_axes([0.93, 0.15, 0.02, 0.7])  # [x, y, width, height]
    # cbar = fig.colorbar(scatter, cax=cax)
    # cbar.set_label('velocity')

    plt.rcParams['axes.unicode_minus'] = False
    ax.tick_params(which = 'major', labelsize=10, pad=0.5,width = 40)

    ticks_font = font_manager.FontProperties(family='Times New Roman')
    ticks_weight = font_manager.FontProperties(weight = "bold")
    for tick in ax.get_xticklabels():
        tick.set_fontproperties(ticks_font)
        tick.set_fontproperties(ticks_weight)
    for tick in ax.get_yticklabels():
        tick.set_fontproperties(ticks_font)
        tick.set_fontproperties(ticks_weight)
    for tick in ax.get_zticklabels():
        tick.set_fontproperties(ticks_font)
        tick.set_fontproperties(ticks_weight)

    # 设置坐标轴标签
    ax.set_xlabel('X',fontname="Times New Roman",fontsize=16,labelpad=3)
    ax.set_ylabel('Y',fontname="Times New Roman",fontsize=16,labelpad=3)
    ax.set_zlabel('Z',fontname="Times New Roman",fontsize=16,labelpad=3)
# 调整子图之间的间距
# plt.tight_layout()

# 显示图形
plt.show()
posted on 2024-02-26 11:52  王大海儿  阅读(15)  评论(0)    收藏  举报