Я использовал приведенный ниже сценарий и не смог выйти за пределы 49-й строки моих данных. Я пытался увеличить значение оси Z во многих местах и заметил, что оно не появится на сопоставленном рисунке, если оно не будет находиться в пределах первых 49 значений (x,y,z).
Будем очень признательны за любые рекомендации.
import pandas as pd
import matplotlib.pyplot as plt
from google.colab import files
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
import numpy as np
from scipy.interpolate import griddata
import io
# Upload the Excel file
uploaded = files.upload()
# Get the file name
file_name = list(uploaded.keys())[0]
# Read the Excel file with all sheets into a dictionary of DataFrames
xls = pd.ExcelFile(io.BytesIO(uploaded[file_name]))
sheet_names = xls.sheet_names
dataframes = {sheet_name: pd.read_excel(xls, sheet_name=sheet_name) for sheet_name in sheet_names}
# Specify the columns to plot
x_column = 'Col_1'
y_column = 'Col_2'
z_column = 'z_values'
# Find the min and max Z values across all sheets
min_z = float('inf')
max_z = float('-inf')
for sheet_name in sheet_names:
df = dataframes[sheet_name]
if z_column in df.columns:
min_z = min(min_z, df[z_column].min())
max_z = max(max_z, df[z_column].max())
# Find the min and max values for the colormap across all sheets
min_value = float('inf')
max_value = float('-inf')
for sheet_name in sheet_names:
df = dataframes[sheet_name]
if z_column in df.columns: # Assuming z_column determines color
min_value = min(min_value, df[z_column].min())
max_value = max(max_value, df[z_column].max())
# Create a figure and subplots for each sheet
fig = plt.figure(figsize=(15, 10))
num_sheets = len(sheet_names)
num_rows = (num_sheets + 2) // 3
num_cols = min(num_sheets, 3)
for i, sheet_name in enumerate(sheet_names):
df = dataframes[sheet_name]
if x_column not in df.columns or y_column not in df.columns or z_column not in df.columns:
print(f"Error: Columns '{x_column}', '{y_column}', or '{z_column}' not found in sheet '{sheet_name}'. Skipping.")
continue
ax = fig.add_subplot(num_rows, num_cols, i + 1, projection='3d')
xi = np.linspace(min(df[x_column]), max(df[x_column]), 100)
yi = np.linspace(min(df[y_column]), max(df[y_column]), 100)
X, Y = np.meshgrid(xi, yi)
Z = griddata((df[x_column], df[y_column]), df[z_column], (X, Y), method='cubic')
surf = ax.plot_surface(X, Y, Z, cmap=cm.viridis, linewidth=0, antialiased=False, vmin=min_value, vmax=max_value)
#surf = ax.plot_surface(x, y, z, rstride=1, cstride=1, cmap='viridis') to prevent downsampling
ax.set_xlabel(x_column)
ax.set_ylabel(y_column)
ax.set_zlabel(z_column)
ax.set_title(f'Sheet: {sheet_name}')
ax.set_zlim(min_z, max_z)
# Add a single colorbar for all plots
fig.subplots_adjust(right=0.8)
cbar_ax = fig.add_axes([0.85, 0.15, 0.05, 0.7])
fig.colorbar(surf, cax=cbar_ax)
plt.show()
Я попробовал несколько вещей, чтобы избежать понижения разрешения, ничего не помогло, и на самом деле это не проблема с разрешением, это проблема с исключением данных, ничего, кроме строки 49, не отображается. Я чувствую, что это какой-то предел модуля, который я использую, но не могу найти нигде, чтобы это настроить. Я пробовал использовать rcount и ccount = 1 и тому подобные, но они, похоже, не помогли. Кадр данных правильный и включает в себя весь мой набор данных из 200 строк, но опять же, трехмерная поверхность не может выходить за пределы сетки 49x49... по крайней мере, так кажется.
Я использовал приведенный ниже сценарий и не смог выйти за пределы 49-й строки моих данных. Я пытался увеличить значение оси Z во многих местах и заметил, что оно не появится на сопоставленном рисунке, если оно не будет находиться в пределах первых 49 значений (x,y,z). Будем очень признательны за любые рекомендации. [code]import pandas as pd import matplotlib.pyplot as plt from google.colab import files from mpl_toolkits.mplot3d import Axes3D from matplotlib import cm import numpy as np from scipy.interpolate import griddata import io
# Upload the Excel file uploaded = files.upload()
# Get the file name file_name = list(uploaded.keys())[0]
# Read the Excel file with all sheets into a dictionary of DataFrames xls = pd.ExcelFile(io.BytesIO(uploaded[file_name])) sheet_names = xls.sheet_names dataframes = {sheet_name: pd.read_excel(xls, sheet_name=sheet_name) for sheet_name in sheet_names}
# Specify the columns to plot x_column = 'Col_1' y_column = 'Col_2' z_column = 'z_values'
# Find the min and max Z values across all sheets min_z = float('inf') max_z = float('-inf') for sheet_name in sheet_names: df = dataframes[sheet_name] if z_column in df.columns: min_z = min(min_z, df[z_column].min()) max_z = max(max_z, df[z_column].max())
# Find the min and max values for the colormap across all sheets min_value = float('inf') max_value = float('-inf') for sheet_name in sheet_names: df = dataframes[sheet_name] if z_column in df.columns: # Assuming z_column determines color min_value = min(min_value, df[z_column].min()) max_value = max(max_value, df[z_column].max())
# Create a figure and subplots for each sheet fig = plt.figure(figsize=(15, 10)) num_sheets = len(sheet_names) num_rows = (num_sheets + 2) // 3 num_cols = min(num_sheets, 3)
for i, sheet_name in enumerate(sheet_names): df = dataframes[sheet_name] if x_column not in df.columns or y_column not in df.columns or z_column not in df.columns: print(f"Error: Columns '{x_column}', '{y_column}', or '{z_column}' not found in sheet '{sheet_name}'. Skipping.") continue
ax = fig.add_subplot(num_rows, num_cols, i + 1, projection='3d') xi = np.linspace(min(df[x_column]), max(df[x_column]), 100) yi = np.linspace(min(df[y_column]), max(df[y_column]), 100) X, Y = np.meshgrid(xi, yi) Z = griddata((df[x_column], df[y_column]), df[z_column], (X, Y), method='cubic')
surf = ax.plot_surface(X, Y, Z, cmap=cm.viridis, linewidth=0, antialiased=False, vmin=min_value, vmax=max_value) #surf = ax.plot_surface(x, y, z, rstride=1, cstride=1, cmap='viridis') to prevent downsampling
# Add a single colorbar for all plots fig.subplots_adjust(right=0.8) cbar_ax = fig.add_axes([0.85, 0.15, 0.05, 0.7]) fig.colorbar(surf, cax=cbar_ax)
plt.show()
[/code] Я попробовал несколько вещей, чтобы избежать понижения разрешения, ничего не помогло, и на самом деле это не проблема с разрешением, это проблема с исключением данных, ничего, кроме строки 49, не отображается. Я чувствую, что это какой-то предел модуля, который я использую, но не могу найти нигде, чтобы это настроить. Я пробовал использовать rcount и ccount = 1 и тому подобные, но они, похоже, не помогли. Кадр данных правильный и включает в себя весь мой набор данных из 200 строк, но опять же, трехмерная поверхность не может выходить за пределы сетки 49x49... по крайней мере, так кажется.
Я использовал приведенный ниже сценарий и не смог выйти за пределы 49-й строки моих данных. Я пытался увеличить значение оси Z во многих местах и заметил, что оно не появится на сопоставленном рисунке, если оно не будет находиться в пределах...
Предполагая, что сфера находится в позиции (на данный момент), я использовал этот метод для расчета точки на поверхности сферы с определенным радиусом по заданным координатам широты/долготы (Vector2 x/y):
public static Vector3...
У меня есть векторные карты удержания в трех измерениях, таких как данные = 1 , data = 2 Где a IS имя файла, B является именем заголовка. И каждая данных под заголовком файла имеет несколько точек данных в качестве карты , показанные как c ниже. на...
У меня есть векторные карты удержания в трех измерениях, таких как данные = 1 , data = 2 Где a IS имя файла, B является именем заголовка. И каждая данных под заголовком файла имеет несколько точек данных в качестве карты , показанные как c ниже. на...