Ich arbeite an einem ternären KDE -Diagramm (Kerneldichteschätzung) unter Verwendung von Matplotlib + Scipy's Gaußsian_kde, aber die Dichteskalierung verhält sich nicht wie erwartet. zeigt ternäre Verteilungen für verschiedene Gruppen (x, y, z). Diese sehen gut aus. >
Das untere Feld (KDE Heatmaps) sollte Dichtekonturen basierend auf denselben Datensätzen anzeigen. Erwartet: < Br /> Der X -Datensatz ist spärlich, daher sollte der KDE schwach oder nahezu leer sein. > Ausgabe: < /strong> < /p>
Obwohl X weniger Datenpunkte hat, erscheint der KDE immer noch strukturiert und unerwartet dicht mit y und z.
vergleichbar Sollte es nicht nahezu leer oder signifikant schwächer sein als mit Y und Z? Zum Testen: KDE_TERNARY_EMABLE.CSV < /p>
Sie können den Datensatz mit: < /p>
laden lassen
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()
Meine Fragen
Warum ist die KDE -Dichte für X strukturiert und nicht so schwach wie erwartet?
Könnte die Auswahl der Bandbreite (BW_Method = 0,25; 'Scott') unerwünschte Glättungseffekte verursachen?>
Ich arbeite an einem ternären KDE -Diagramm (Kerneldichteschätzung) unter Verwendung von Matplotlib + Scipy's Gaußsian_kde, aber die Dichteskalierung verhält sich nicht wie erwartet. zeigt ternäre Verteilungen für verschiedene Gruppen (x, y, z). Diese sehen gut aus. > Das untere Feld (KDE Heatmaps) sollte Dichtekonturen basierend auf denselben Datensätzen anzeigen. [b] Erwartet: [/b] < Br /> Der X -Datensatz ist spärlich, daher sollte der KDE schwach oder nahezu leer sein. > [b] Ausgabe: < /strong> < /p> Obwohl X weniger Datenpunkte hat, erscheint der KDE immer noch strukturiert und unerwartet dicht mit y und z. vergleichbar Sollte es nicht nahezu leer oder signifikant schwächer sein als mit Y und Z? Zum Testen: KDE_TERNARY_EMABLE.CSV < /p> Sie können den Datensatz mit: < /p> laden lassen[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] Mein aktueller Code: [/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] Meine Fragen [/b] Warum ist die KDE -Dichte für X strukturiert und nicht so schwach wie erwartet? Könnte die Auswahl der Bandbreite (BW_Method = 0,25; 'Scott') unerwünschte Glättungseffekte verursachen?>
Ich arbeite für mein Studium an ternären KDE -Handlungen und kann nicht herausfinden, was schief geht. Ich hoffe, jemand hier kann helfen, bevor ich noch zwei Tage (und meine geistige Gesundheit)...
Ich arbeite an einem ternären KDE -Diagramm (Kernel -Dichte -Schätzung) unter Verwendung von Matplotlib + Scipy's Gaußsian_kde, aber die Dichteskalierung verhält sich nicht wie erwartet. Diese sehen...
Ich bin auf einem M1 MacBook Air Running Fedora Asahi Linux. Meine Desktop -Umgebung ist KDE, und das System verwendet Libinput und Wayland von dem, was ich beurteilen kann. Das Trackpad ist im...
Ich arbeite daran, ein Diagramm zu erstellen und die Datenbank mit C# WPF nachzuschlagen.
Es ist mir gelungen, die Datenbanksuche und das Diagramm durchzuführen.
Ist es möglich, ein Diagramm zu...
Ich arbeite daran, ein Diagramm zu erstellen und die Datenbank mit C# WPF nachzuschlagen. Es ist mir gelungen, die DB-Suche und das Diagramm durchzuführen.
Ist es möglich, ein Diagramm dieser Form...