python三维曲面图投影_matplotlib:在2dp上投影三维曲面

本文探讨了如何在Matplotlib中实现三维数据在二维图表中的投影绘制,包括使用contourf填充颜色以及利用Polygon绘制每个投影面的方法。

有与“Axes3”相当的吗DSubplot.plot_表面“在2D里?

我试图在matplotlib中绘制网格在XY平面上的投影(因此不是在“3d”模式下)。在import numpy as np

import matplotlib.pyplot as plt

from mpl_toolkits.mplot3d import Axes3D

# Data (wireframe sphere)

theta, phi = np.meshgrid( np.linspace(0, np.pi/2, 10), np.linspace(0, np.pi/2, 10) )

x = np.sin(theta) * np.cos(phi)

y = np.sin(theta) * np.sin(phi)

z = np.cos(theta)

fig = plt.figure()

# Subplot 3D

ax1 = fig.add_subplot(1, 2, 1, projection='3d', aspect='equal')

colors = matplotlib.cm.jet(np.hypot(x,y))

surface = ax1.plot_surface(x, y, z, rstride=1, cstride=1, facecolors = colors, alpha=0.5 )

projection = ax1.plot_surface(0, y, z, rstride=1, cstride=1, facecolors = colors )

projection.set_edgecolor('k')

# Subplot 2D

ax2 = fig.add_subplot(1, 2, 2, aspect='equal')

ax2.plot(y, z, 'k')

ax2.plot(y.T, z.T, 'k')

我试图得出一个类似的结果:

^{pr2}$

但在二维子图中。在AxesSubplot的文档中找不到plot_surface的等效项。我唯一能做的就是绘制线框(而不是面颜色):ax2.plot(y, z, 'k')

ax2.plot(y.T, z.T, 'k')

我不能上传图片,但基本上,我想把“颜色”放在第二个子图中。

谢谢

编辑:

@蒂姆

是的,我想,在这种情况下,我设法做到了:ax2.contourf(y, z, np.hypot(x,y), levels=np.hypot(x,y)[0], cmap=matplotlib.cm.jet)

在更一般的情况下,您需要使用正确的level函数,并对levels和colormap进行一些调整,但这似乎是可行的。在

另一个解决方案是使用matplotlib.patches.Polygon绘制每个投影面。在

import pandas as pd import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D from scipy.interpolate import griddata from matplotlib.colors import LinearSegmentedColormap, Normalize import os from matplotlib.colorbar import ColorbarBase def generate_multi_fsimc_surfaces(): # 1. 数据加载部分 print("从Excel加载原始数据...") try: script_dir = os.path.dirname(os.path.abspath(__file__)) excel_path = os.path.join(script_dir, 'fsim_data.xlsx') df = pd.read_excel(excel_path) required_columns = ['BOW', 'WAVE'] if not all(col in df.columns for col in required_columns): missing = [col for col in required_columns if col not in df.columns] raise ValueError(f"Excel文件缺少必要的列: {missing}") # 包含 FsimC_DP 的所有 FsimC 列 fsimc_columns = [col for col in df.columns if col.startswith('FsimC') or col == 'FsimC_DP'] if not fsimc_columns: raise ValueError("未找到任何FsimC列") print(f"找到 {len(fsimc_columns)} 个FsimC列: {', '.join(fsimc_columns)}") # 曲面描述信息 column_descriptions = { 'FsimC_10': '10m viewing distance', 'FsimC_20': '20m viewing distance', 'FsimC_30': '30m viewing distance', 'FsimC_40': '40m viewing distance', 'FsimC_50': '50m viewing distance', 'FsimC_60': '60m viewing distance', 'FsimC_70': '70m viewing distance', 'FsimC_80': '80m viewing distance', 'FsimC_90': '90m viewing distance', 'FsimC_100': '100m viewing distance', 'FsimC_DP': 'recommended range' # 新增描述 } points = df[['BOW', 'WAVE']].values fsimc_values = {col: df[col].values for col in fsimc_columns} all_fsimc_min = float('inf') all_fsimc_max = float('-inf') for col in fsimc_columns: col_min = df[col].min() col_max = df[col].max() if col_min < all_fsimc_min: all_fsimc_min = col_min if col_max > all_fsimc_max: all_fsimc_max = col_max z_padding = (all_fsimc_max - all_fsimc_min) * 0.1 z_min = all_fsimc_min - z_padding z_max = all_fsimc_max + z_padding print(f"全局FsimC范围: {all_fsimc_min:.4f} 到 {all_fsimc_max:.4f}") print(f"设置Z轴范围: {z_min:.4f} 到 {z_max:.4f}") except FileNotFoundError: print(f"错误: 找不到数据文件 {excel_path}") print("请确保fsim_data.xlsx文件位于脚本同一目录下") return except Exception as e: print(f"加载数据时出错: {str(e)}") return # 2. 创建高分辨率网格 print("创建高分辨率网格...") x_fine = np.linspace(1, 5, 150) y_fine = np.linspace(0.1, 1.0, 100) X_fine, Y_fine = np.meshgrid(x_fine, y_fine) # 3. 创建3D图表 print("创建3D图表...") fig = plt.figure(figsize=(18, 14)) ax = fig.add_axes([0.1, 0.07, 0.7, 0.83], projection='3d') # 4. 定义全局颜色映射 print("创建颜色映射...") global_cmap = LinearSegmentedColormap.from_list( "global_cmap", [(0.1, 0.2, 0.8), (0.2, 0.8, 0.4), (1.0, 0.9, 0.1)], N=512 ) global_norm = Normalize(vmin=all_fsimc_min, vmax=all_fsimc_max) alphas = [0.65, 0.55, 0.45, 0.35, 0.25, 0.15] # 5. 曲面绘制和标签添加 print(f"开始处理 {len(fsimc_columns)} 个曲面并添加标签...") # 查找固定点(BOW=1, WAVE=1)的网格索引 bow_target = 1.0 wave_target = 1.0 bow_idx = np.abs(x_fine - bow_target).argmin() wave_idx = np.abs(y_fine - wave_target).argmin() # 存储标签位置用于避免重叠 label_positions = [] min_spacing = 0.035 base_offset = 0.015 # 预计算所有曲面在固定点的Z值 fixed_point_z = {} for col_name, values in fsimc_values.items(): Z_fine = griddata(points, values, (X_fine, Y_fine), method='cubic') fixed_point_z[col_name] = Z_fine[wave_idx, bow_idx] # 按固定点Z值降序排列(从高到低)- 确保 FsimC_DP 最后绘制 fsimc_columns_without_dp = [col for col in fsimc_columns if col != 'FsimC_DP'] sorted_columns = sorted(fsimc_columns_without_dp, key=lambda col: fixed_point_z[col], reverse=True) # 如果有 FsimC_DP,则添加到列表末尾以确保最后绘制(最上层) if 'FsimC_DP' in fsimc_columns: sorted_columns.append('FsimC_DP') # 记录上一个标签的高度和标签位置字典 last_label_z = float('-inf') label_z_values = {} max_label_z = float('-inf') # 存储每个列名对应的标签颜色 label_colors = {} # 第一遍:确定所有标签位置 for col_name in sorted_columns: base_z = fixed_point_z[col_name] label_z = base_z + base_offset if label_z > last_label_z - min_spacing: label_z = min(label_z, last_label_z - min_spacing) if label_z < base_z + 0.005: label_z = base_z + 0.005 last_label_z = label_z label_z_values[col_name] = label_z if label_z > max_label_z: max_label_z = label_z # 第二遍:绘制曲面和标签 for i, col_name in enumerate(sorted_columns): values = fsimc_values[col_name] print(f"正在处理列: {col_name} ({i+1}/{len(sorted_columns)})") print(" 执行插值...") Z_fine = griddata(points, values, (X_fine, Y_fine), method='cubic') # 曲面着色 - 为 FsimC_DP 使用单一红色 if col_name == 'FsimC_DP': # 创建固定颜色的数组 (纯红色) facecolors = np.zeros((Z_fine.shape[0]-1, Z_fine.shape[1]-1, 4)) facecolors[:, :, 0] = 1.0 # R facecolors[:, :, 1] = 0.0 # G facecolors[:, :, 2] = 0.0 # B else: # 常规着色方式 Z_top_left = Z_fine[:-1, :-1] Z_top_right = Z_fine[:-1, 1:] Z_bottom_left = Z_fine[1:, :-1] Z_bottom_right = Z_fine[1:, 1:] Z_midpoints = (Z_top_left + Z_top_right + Z_bottom_left + Z_bottom_right) / 4.0 facecolors = global_cmap(global_norm(Z_midpoints)) # 设置透明度(延续之前的规律) alpha_idx = min(i, len(alphas)-1) alpha = alphas[alpha_idx] facecolors[:, :, 3] = alpha print(f" 渲染曲面 (透明度: {alpha:.2f})...") stride_x = 1 stride_y = 1 if len(x_fine) > 100: render_density = max(1, int(len(x_fine)/75)) stride_x = render_density stride_y = max(1, int(render_density/1.5)) surf = ax.plot_surface( X_fine[::stride_y, ::stride_x], Y_fine[::stride_y, ::stride_x], Z_fine[::stride_y, ::stride_x], facecolors=facecolors[::stride_y, ::stride_x], shade=False, rcount=min(300, len(y_fine)), ccount=min(300, len(x_fine)), alpha=alpha, antialiased=True, edgecolor='black', linewidth=0.1, zorder=len(fsimc_columns)-i ) print(" 添加曲面标签...") label_x = X_fine[wave_idx, bow_idx] label_y = Y_fine[wave_idx, bow_idx] base_z = fixed_point_z[col_name] # 为 FsimC_DP 使用红色标签,其他使用基于值的颜色 if col_name == 'FsimC_DP': text_color = (1.0, 0.0, 0.0) # 纯红色 else: normalized_value = global_norm(base_z) text_color = global_cmap(normalized_value)[:3] # RGB颜色 # 存储标签颜色 label_colors[col_name] = text_color # 使用计算的标签高度 label_z = label_z_values[col_name] # 添加标签(移除标签背景框) ax.text( label_x, label_y, label_z, " " + col_name, fontsize=11, color=text_color, fontweight='bold', ha='left', va='center', zorder=100 ) label_positions.append((label_x, label_y, label_z)) # 6. 调整Z轴上限以容纳标签 if max_label_z > z_max: print(f"调整Z轴上限以容纳标签: 原上限 {z_max:.4f}, 新上限 {max_label_z + 0.03:.4f}") z_max = max_label_z + 0.03 # 7. 添加全局注释(无背景框) print("添加全局注释(无背景框)...") # 注释位置参数 - 调整后位置 (0.90, 0.10) annotation_x = 0.90 # 在图形右侧,向左移动避免与颜色条重叠 annotation_y = 0.10 # 图形底部上方,提高位置避免被遮挡 annotation_height = len(fsimc_columns) * 0.02 # 每行高度0.02 # 添加带颜色的注释文本(使用图形坐标) for i, col in enumerate(fsimc_columns): text = f"{col}: {column_descriptions.get(col, 'Undefined description')}" text_y = annotation_y + (len(fsimc_columns) - i - 1) * 0.02 # 使用对应的标签颜色 color = label_colors.get(col, 'darkblue') # 添加注释文本(无背景框) plt.figtext( annotation_x, text_y, text, fontsize=12, color=color, ha='right', va='bottom', zorder=100, fontweight='bold' # 加粗文本提高可读性 ) # 8. 坐标轴设置 ax.set_xlabel('BOW (‰)', fontsize=15, labelpad=25) ax.set_ylabel('WAVE (‰)', fontsize=15, labelpad=25) ax.set_zlabel('FsimC', fontsize=15, labelpad=25) title = ax.set_title( f'Multi-FsimC Analysis ({len(fsimc_columns)} Surfaces)', fontsize=20, pad=15, y=0.98 ) ax.set_xticks(np.linspace(1, 5, 5)) ax.set_yticks([0.2, 0.4, 0.6, 0.8, 1.0]) z_step = 0.05 z_min_rounded = np.floor(z_min / z_step) * z_step z_max_rounded = np.ceil(z_max / z_step) * z_step z_ticks = np.arange(z_min_rounded, z_max_rounded + z_step/2, z_step) if len(z_ticks) > 10: step_idx = max(1, int(len(z_ticks) / 5)) z_ticks = z_ticks[::step_idx] ax.set_zticks(z_ticks) ax.set_zticklabels([f"{z:.2f}" for z in z_ticks]) ax.tick_params(axis='both', which='major', labelsize=11, pad=10) # 9. 网格和平面设置 print("添加背景网格线...") grid_params = { 'visible': True, 'linestyle': '--', 'linewidth': 0.5, 'alpha': 0.2, 'color': 'gray' } ax.xaxis._axinfo["grid"].update(grid_params) ax.yaxis._axinfo["grid"].update(grid_params) ax.zaxis._axinfo["grid"].update(grid_params) ax.xaxis.pane.fill = False ax.yaxis.pane.fill = False ax.zaxis.pane.fill = False ax.xaxis.pane.set_edgecolor('lightgray') ax.yaxis.pane.set_edgecolor('lightgray') ax.zaxis.pane.set_edgecolor('lightgray') ax.xaxis.pane.set_alpha(0.05) ax.yaxis.pane.set_alpha(0.05) ax.zaxis.pane.set_alpha(0.05) # 10. 视图设置 print("配置轴测图投影...") ax.set_proj_type('ortho') ax.view_init(elev=32, azim=42) ax.set_box_aspect(aspect=(1, 1, 1)) ax.set_xlim(0.5, 5.5) ax.set_ylim(0.0, 1.1) ax.set_zlim(z_min, z_max) # 11. 添加全局颜色条 print("添加全局FsimC颜色条...") cax = fig.add_axes([0.85, 0.25, 0.02, 0.5]) cbar = ColorbarBase( cax, cmap=global_cmap, norm=global_norm, orientation='vertical', label='FsimC Value' ) cbar.set_label('FsimC Value', fontsize=12, labelpad=15) cbar.ax.tick_params(labelsize=10) # 12. 保存和显示 print("保存多曲面轴测图...") plt.savefig(f'multi_fsimc_surfaces_{len(fsimc_columns)}.png', dpi=350, bbox_inches='tight') print("渲染完成,显示图表...") plt.tight_layout(pad=3.0) plt.show() if __name__ == "__main__": generate_multi_fsimc_surfaces() 上述python代码中导出png文件名中曲面数量,不应包含FsimC_DP曲面。将FsimC_DP曲面上部空间生成一个空间体,颜色与FsimC_DP曲面一致,相同透明度,高度仅到现有FsimC值的最大值,调整python代码。
10-26
我正在编辑【python】代码,遇到了 【画图结果出错】 ,请帮我检查并改正错误点。我的原始代码如下: 【import numpy as np from scipy.optimize import newton import matplotlib.pyplot as plt from matplotlib.ticker import MultipleLocator # ========================== # CO₂物性参数设置 # ========================== Tc = 304.13 # 临界温度 (K) Pc = 7.38e6 # 临界压力 (Pa) omega = 0.225 # 偏心因子 R = 8.314 # 气体常数 (J/(mol·K)) M = 44.01e-3 # 摩尔质量 (kg/mol) # ========================== # PR状态方程相关函数 # ========================== def pr_parameters(T): """计算PR方程参数a和b""" k = 0.37464 + 1.54226 * omega - 0.26992 * omega ** 2 alpha = (1 + k * (1 - np.sqrt(T / Tc))) ** 2 a = 0.45724 * (R ** 2 * Tc ** 2) / Pc * alpha b = 0.07780 * R * Tc / Pc return a, b def pr_equation(Z, T, P): """定义PR方程的三次方形式""" a, b = pr_parameters(T) A = a * P / (R ** 2 * T ** 2) B = b * P / (R * T) return Z ** 3 - (1 - B) * Z ** 2 + (A - 3 * B ** 2 - 2 * B) * Z - (A * B - B ** 2 - B ** 3) def calculate_density(T, P): """计算CO₂密度 (kg/m³)""" try: # 牛顿迭代法求解压缩因子 Z_initial_guess = 0.6 # 超临界流体典型初始值 Z = newton(pr_equation, Z_initial_guess, args=(T, P)) molar_volume = Z * R * T / P # 摩尔体积 (m³/mol) return M / molar_volume except: return np.nan # 处理不收敛情况 # ========================== # 敏感性分析参数设置 # ========================== # 温度范围 (转换为开尔文) T_min = 31 + 273.15 # 304.15 K T_max = 100 + 273.15 # 373.15 K P_min = 7e6 # 7 MPa (转换为Pa) P_max = 30e6 # 30 MPa # 网格参数 n_points = 50 # 网格密度 delta = 0.1 # 差分步长 (K/MPa) # 生成计算网格 T_values = np.linspace(T_min, T_max, n_points) P_values = np.linspace(P_min, P_max, n_points) TT, PP = np.meshgrid(T_values, P_values) # ========================== # 主计算循环 # ========================== d_rho_dT = np.zeros_like(TT) d_rho_dP = np.zeros_like(TT) rho_grid = np.zeros_like(TT) print("开始计算密度场...") for i in range(n_points): for j in range(n_points): T = TT[i, j] P = PP[i, j] # 计算基础密度 rho = calculate_density(T, P) rho_grid[i, j] = rho # 温度敏感性 (中心差分) if T + delta <= T_max and T - delta >= T_min: rho_Tp = calculate_density(T + delta, P) rho_Tm = calculate_density(T - delta, P) d_rho_dT[i, j] = (rho_Tp - rho_Tm) / (2 * delta) # 压力敏感性 (中心差分) if P + delta * 1e6 <= P_max and P - delta * 1e6 >= P_min: rho_Pp = calculate_density(T, P + delta * 1e6) rho_Pm = calculate_density(T, P - delta * 1e6) d_rho_dP[i, j] = (rho_Pp - rho_Pm) / (2 * delta * 1e6) print("计算完成,开始绘图...") # ========================== # 可视化设置 # ========================== plt.rcParams.update({'font.size': 12, 'font.family': 'Arial'}) extent = [T_min - 273.15, T_max - 273.15, P_min / 1e6, P_max / 1e6] # 温度敏感性热图 plt.figure(figsize=(12, 5)) plt.subplot(121) cf = plt.contourf(TT - 273.15, PP / 1e6, np.abs(d_rho_dT), levels=50, cmap='viridis') plt.colorbar(cf, label='|∂ρ/∂T| (kg/m³/K)') plt.contour(TT - 273.15, PP / 1e6, np.abs(d_rho_dT), colors='k', linewidths=0.5, levels=10) plt.scatter(Tc - 273.15, Pc / 1e6, c='red', marker='*', s=100, label='Critical Point') plt.xlabel('Temperature (°C)') plt.ylabel('Pressure (MPa)') plt.title('Temperature Sensitivity') plt.grid(alpha=0.3) plt.legend() # 压力敏感性热图 plt.subplot(122) cf = plt.contourf(TT - 273.15, PP / 1e6, np.abs(d_rho_dP), levels=50, cmap='plasma') plt.colorbar(cf, label='|∂ρ/∂P| (kg/m³/MPa)') plt.contour(TT - 273.15, PP / 1e6, np.abs(d_rho_dP), colors='k', linewidths=0.5, levels=10) plt.scatter(Tc - 273.15, Pc / 1e6, c='red', marker='*', s=100, label='Critical Point') plt.xlabel('Temperature (°C)') plt.ylabel('Pressure (MPa)') plt.title('Pressure Sensitivity') plt.grid(alpha=0.3) plt.legend() plt.tight_layout() plt.show() # ========================== # 高敏感区域识别 # ========================== # 识别敏感性高于平均值的区域 threshold_T = 0.8 * np.nanmax(np.abs(d_rho_dT)) threshold_P = 0.8 * np.nanmax(np.abs(d_rho_dP)) high_sens_T = np.where(np.abs(d_rho_dT) > threshold_T) high_sens_P = np.where(np.abs(d_rho_dP) > threshold_P) print("\n高温度敏感性区域特征:") print(f"- 温度范围: {np.min(TT[high_sens_T] - 273.15):.1f} ~ {np.max(TT[high_sens_T] - 273.15):.1f} °C") print(f"- 压力范围: {np.min(PP[high_sens_T] / 1e6):.1f} ~ {np.max(PP[high_sens_T] / 1e6):.1f} MPa") print("\n高压力敏感性区域特征:") print(f"- 温度范围: {np.min(TT[high_sens_P]-273.15):.1f} ~ {np.max(TT[high_sens_P] - 273.15):.1f} °C") print(f"- 压力范围: {np.min(PP[high_sens_P] / 1e6):.1f} ~ {np.max(PP[high_sens_P] / 1e6):.1f} MPa") # ========================== # 新增:折线图绘制函数 # ========================== def plot_sensitivity_profiles(): # 设置固定参数 fixed_pressures = [7.38, 10, 15, 20] # MPa (临界压力和其他典型值) fixed_temperatures = [35, 50, 60] # °C # 创建画布 plt.figure(figsize=(15, 10)) # =================================================================== # 子图1:固定压力时温度敏感性随温度变化 # =================================================================== plt.subplot(2, 2, 1) for P_fixed in fixed_pressures: # 找到最接近的压力索引 P_idx = np.argmin(np.abs(P_values / 1e6 - P_fixed)) # 提取对应压力下的数据 T_profile = TT[:, P_idx] - 273.15 # 转换为°C sens_profile = np.abs(d_rho_dT[:, P_idx]) # 过滤无效值 valid = ~np.isnan(sens_profile) plt.plot(T_profile[valid], sens_profile[valid], lw=2, marker='o', markersize=5, label=f'P={P_fixed} MPa') plt.xlabel('Temperature (°C)') plt.ylabel('|∂ρ/∂T| (kg/m³/K)') plt.title('Temperature Sensitivity at Fixed Pressures') plt.grid(alpha=0.3) plt.legend() # =================================================================== # 子图2:固定温度时压力敏感性随压力变化 # =================================================================== plt.subplot(2, 2, 2) for T_fixed in fixed_temperatures: # 找到最接近的温度索引 T_idx = np.argmin(np.abs(T_values - (T_fixed + 273.15))) # 提取对应温度下的数据 P_profile = PP[T_idx, :] / 1e6 # 转换为MPa sens_profile = np.abs(d_rho_dP[T_idx, :]) # 过滤无效值 valid = ~np.isnan(sens_profile) plt.plot(P_profile[valid], sens_profile[valid], lw=2, marker='s', markersize=5, label=f'T={T_fixed}°C') plt.xlabel('Pressure (MPa)') plt.ylabel('|∂ρ/∂P| (kg/m³/MPa)') plt.title('Pressure Sensitivity at Fixed Temperatures') plt.grid(alpha=0.3) plt.legend() # =================================================================== # 子图3:固定压力时压力敏感性随温度变化(交叉分析) # =================================================================== plt.subplot(2, 2, 3) for P_fixed in fixed_pressures: P_idx = np.argmin(np.abs(P_values / 1e6 - P_fixed)) T_profile = TT[:, P_idx] - 273.15 sens_profile = np.abs(d_rho_dP[:, P_idx]) valid = ~np.isnan(sens_profile) plt.semilogy(T_profile[valid], sens_profile[valid], # 对数坐标 lw=2, linestyle='--', label=f'P={P_fixed} MPa') plt.xlabel('Temperature (°C)') plt.ylabel('|∂ρ/∂P| (kg/m³/MPa)') plt.title('Pressure Sensitivity vs Temperature (log scale)') plt.grid(alpha=0.3, which='both') plt.legend() # =================================================================== # 子图4:固定温度时温度敏感性随压力变化(交叉分析) # =================================================================== plt.subplot(2, 2, 4) for T_fixed in fixed_temperatures: T_idx = np.argmin(np.abs(T_values - (T_fixed + 273.15))) P_profile = PP[T_idx, :] / 1e6 sens_profile = np.abs(d_rho_dT[T_idx, :]) valid = ~np.isnan(sens_profile) plt.semilogy(P_profile[valid], sens_profile[valid], lw=2, linestyle='-.', label=f'T={T_fixed}°C') plt.xlabel('Pressure (MPa)') plt.ylabel('|∂ρ/∂T| (kg/m³/K)') plt.title('Temperature Sensitivity vs Pressure (log scale)') plt.grid(alpha=0.3, which='both') plt.legend() plt.tight_layout() plt.show() # ========================== # 执行绘图 # ========================== print("\n生成折线图...") plot_sensitivity_profiles()】
05-11
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值