Я работаю над графиком тройного KDE (оценка плотности ядра) с использованием Matplotlib + Scipy's Gaussian_kde, но масштабирование плотности не ведет себя, как ожидалось. Показывает тройные распределения для разных групп (x, y, z). Они выглядят нормально.
нижняя панель (Heatmaps KDE) должна показывать контуры плотности на основе тех же наборов данных. Br /> Набор данных X редк, поэтому KDE должен быть слабым или почти пустым.
Наборы данных Y и Z имеют больше данных, поэтому они должны иметь более сильные градиенты KDE. < /p>
Разве это не должно быть почти пустым или значительно более слабым по сравнению с Y и z? Для тестирования: kde_ternary_example.csv < /p>
Вы можете загрузить набор данных, используя: < /p>
import pandas as pd
# Load dataset from Google Drive link
file_url = "https://drive.google.com/uc?id=1p6qwnEom_ybyhbTNLUOThoVB5YE5xcyJ"
df = pd.read_csv(file_url)
print(df.head()) # Preview the dataset
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from matplotlib.patches import Polygon
from scipy.stats import gaussian_kde
# Load dataset
file_url = "https://drive.google.com/uc?id=1p6qwnEom_ybyhbTNLUOThoVB5YE5xcyJ"
df = pd.read_csv(file_url)
# Define ternary combinations and corresponding filters
ternary_combinations = [
(['B', 'C', 'A'], 'X'),
(['C', 'D', 'B'], 'Y'),
(['D', 'E', 'C'], 'Z')
]
# Function to convert barycentric to Cartesian coordinates
def barycentric_to_cartesian(data):
triangle_vertices = np.array([[0, 0], [1, 0], [0.5, np.sqrt(3) / 2]]) # Equilateral triangle
return np.dot(data, triangle_vertices)
# Function to check if points are inside the triangle
def is_inside_triangle(points, triangle_vertices):
A, B, C = triangle_vertices
v0, v1, v2 = B - A, C - A, points - A
d00, d01, d11 = np.dot(v0, v0), np.dot(v0, v1), np.dot(v1, v1)
d20, d21 = np.einsum('ij,j->i', v2, v0), np.einsum('ij,j->i', v2, v1)
denom = d00 * d11 - d01 * d01
u = (d11 * d20 - d01 * d21) / denom
v = (d00 * d21 - d01 * d20) / denom
return (u >= 0) & (v >= 0) & (u + v 0
data = data[valid_rows] / sum_values[valid_rows]
cartesian_points = barycentric_to_cartesian(data)
# Scatter plot
ax.scatter(cartesian_points[:, 0], cartesian_points[:, 1], s=20, alpha=0.5,
facecolors='none', edgecolors='black', linewidth=0.6, zorder=1)
# KDE calculation
if np.linalg.matrix_rank(np.cov(cartesian_points.T)) < 2:
cartesian_points += np.random.normal(0, 1e-6, cartesian_points.shape) # Add small noise
kde = gaussian_kde(cartesian_points.T, bw_method=0.25)
x = np.linspace(0, 1, 200)
y = np.linspace(0, np.sqrt(3) / 2, 200)
X, Y = np.meshgrid(x, y)
grid_points = np.vstack([X.ravel(), Y.ravel()]).T
# Mask points outside the triangle
triangle_vertices = np.array([[0, 0], [1, 0], [0.5, np.sqrt(3) / 2]])
mask = is_inside_triangle(grid_points, triangle_vertices)
Z = np.full(grid_points.shape[0], np.nan)
Z[mask] = kde(grid_points[mask].T)
Z = Z.reshape(X.shape)
# Set density limit
max_density = np.nanmax(Z)
Z[Z > 0.4 * max_density] = 0.4 * max_density
Z[Z < 0.03 * max_density] = np.nan
# Plot KDE
contour = ax.contourf(X, Y, Z, levels=12, cmap='viridis', alpha=0.85, zorder=2)
# Draw triangle boundary
ax.add_patch(Polygon(triangle_vertices, closed=True, fill=False, edgecolor='black',
linewidth=2.5, linestyle='dashed', zorder=3))
# Remove axes and set aspect ratio
ax.set_xticks([])
ax.set_yticks([])
ax.set_frame_on(False)
ax.set_aspect('equal')
# Colorbar
cbar = plt.colorbar(contour, ax=ax, orientation='horizontal', fraction=0.05, pad=0.08)
cbar.set_label('Density', fontsize=12)
for ax, (ternary_set, norm_filter) in zip(axes, ternary_combinations):
plot_ternary(ax, ternary_set, norm_filter)
plt.show()
# Generate and save ternary plots with filters
plot_ternary_diagram()
Мои вопросы
Почему плотность KDE для X появляется структурированная и не такая слабая, как ожидалось?
Можно ли выбор полосы пропускания (bw_method = 0,25; 'scott') вызывать нежелательные эффекты сглаживания?>
Я работаю над графиком тройного KDE (оценка плотности ядра) с использованием Matplotlib + Scipy's Gaussian_kde, но масштабирование плотности не ведет себя, как ожидалось. Показывает тройные распределения для разных групп (x, y, z). Они выглядят нормально.
нижняя панель (Heatmaps KDE) должна показывать контуры плотности на основе тех же наборов данных. Br /> Набор данных X редк, поэтому KDE должен быть слабым или почти пустым. Наборы данных Y и Z имеют больше данных, поэтому они должны иметь более сильные градиенты KDE. < /p> Разве это не должно быть почти пустым или значительно более слабым по сравнению с Y и z? Для тестирования: kde_ternary_example.csv < /p> Вы можете загрузить набор данных, используя: < /p> [code]import pandas as pd
# Load dataset from Google Drive link file_url = "https://drive.google.com/uc?id=1p6qwnEom_ybyhbTNLUOThoVB5YE5xcyJ" df = pd.read_csv(file_url)
print(df.head()) # Preview the dataset [/code] [b] мой текущий код: [/b] [code]import numpy as np import matplotlib.pyplot as plt import pandas as pd from matplotlib.patches import Polygon from scipy.stats import gaussian_kde
# KDE calculation if np.linalg.matrix_rank(np.cov(cartesian_points.T)) < 2: cartesian_points += np.random.normal(0, 1e-6, cartesian_points.shape) # Add small noise kde = gaussian_kde(cartesian_points.T, bw_method=0.25)
x = np.linspace(0, 1, 200) y = np.linspace(0, np.sqrt(3) / 2, 200) X, Y = np.meshgrid(x, y) grid_points = np.vstack([X.ravel(), Y.ravel()]).T
# Mask points outside the triangle triangle_vertices = np.array([[0, 0], [1, 0], [0.5, np.sqrt(3) / 2]]) mask = is_inside_triangle(grid_points, triangle_vertices) Z = np.full(grid_points.shape[0], np.nan) Z[mask] = kde(grid_points[mask].T) Z = Z.reshape(X.shape)
for ax, (ternary_set, norm_filter) in zip(axes, ternary_combinations): plot_ternary(ax, ternary_set, norm_filter)
plt.show()
# Generate and save ternary plots with filters plot_ternary_diagram() [/code] [b] Мои вопросы [/b] Почему плотность KDE для X появляется структурированная и не такая слабая, как ожидалось? Можно ли выбор полосы пропускания (bw_method = 0,25; 'scott') вызывать нежелательные эффекты сглаживания?>
Я работаю над участками для своего обучения, и я не могу понять, что идет не так. Надеясь, что кто -то здесь сможет помочь, прежде чем я потеряю еще два дня (и мое здравомыслие) настройку этого!
Что происходит? (X, y и z) для различных комбинаций...
Я работаю над участком Ternary KDE (оценка плотности ядра) для своего исследования, и я не могу понять, что происходит не так. Надеясь, что кто -то здесь сможет помочь, прежде чем я потеряю еще два дня (и мое здравомыслие) настройку этого!
Что...
Я работаю над участком Ternary KDE (оценка плотности ядра) для своего исследования, и я не могу понять, что происходит не так. Надеясь, что кто -то здесь сможет помочь, прежде чем я потеряю еще два дня (и мое здравомыслие) настройку этого!
Что...
Я работаю над графиком тройного KDE (оценка плотности ядра) с использованием matplotlib + scipy's gaussian_kde, но масштабирование плотности не ведет себя, как и ожидалось.
Графики) показывают тройные распределения для разных групп (x, y, z). Они...
Я работаю над графиком тройного KDE (оценка плотности ядра) с использованием Matplotlib + Scipy's Gaussian_kde, но масштабирование плотности не ведет себя, как ожидалось. Показывает тройные распределения для разных групп (x, y, z). Они выглядят...