Что происходит? (X, y и z) для различных комбинаций параметров (A, B, C, D и E). Они выглядят хорошо - здесь нет проблем. Что я получил:
x график (самый левый): набор данных редкий, поэтому я ожидал, что график плотности будет очень слабым или почти отсутствует в глобальном масштабе.
y & z Графики: У них гораздо большие наборы данных, поэтому я ожидал более четких и более плотных распределений KDE, которые кажутся разумными. < /p>
Однако график плотности для X все еще выглядит больше структурирован, чем я ожидал. Разве это не должно быть почти пустым или значительно ниже по интенсивности по сравнению с Y и Z?
Что я использую:
matplotlib + gaussian_kde для оценки плотности. > Я все еще новичок в заговоре KDE и TERNARY, поэтому любой совет был бы очень оценен, прежде чем я потеряю еще один выходной, пытаясь понять это. /p>
`
Я построил тройной KDE, используя Gaussian_kde из scipy после преобразования моих тройных данных в декартовые координаты. Я ожидал, что x -график (самый левый) будет иметь практически без плотности из -за его разреженных данных, в то время как Y и Z (с большим количеством данных) должны показывать более сильные градиенты плотности. Тем не менее, график X все еще имеет структурированный рисунок KDE вместо того, чтобы быть почти пустым или очень слабым. Я пытаюсь понять, связано ли это с выбором полосы пропускания, проблемами нормализации или чем -то еще. Br />import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import os
from matplotlib.patches import Polygon
from scipy.stats import gaussian_kde
# Load dataset
file_path = r"C:\Users\...\example_help.xlsx"
# Check if the file exists
if not os.path.exists(file_path):
raise FileNotFoundError(f"The file at {file_path} does not exist.")
df = pd.read_excel(file_path, sheet_name='Sheet1')
df.columns = df.columns.str.replace(r'[\[\]]', '', regex=True).str.strip()
# Define ternary combinations and filters
TERNARY_COMBINATIONS = [
(['B_%wt', 'C_%wt', 'A_%wt'], 'X'),
(['C_%wt', 'D_%wt', 'B_%wt'], 'Y'),
(['D_%wt', 'E_%wt', 'C_%wt'], 'Z')
]
def barycentric_to_cartesian(data):
triangle_vertices = np.array([[0, 0], [1, 0], [0.5, np.sqrt(3) / 2]])
return np.dot(data, triangle_vertices)
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
Подробнее здесь: https://stackoverflow.com/questions/794 ... ty-scaling