Análisis de Contacto

data = pd.read_csv('compositos.txt', sep='\t')
litologias = data['lito'].unique() 
combinaciones = list(itertools.combinations(litologias, 2))
for lito_1, lito_2 in combinaciones:
    litologia_1 = data[data['lito'] == lito_1]
    litologia_2 = data[data['lito'] == lito_2]
    if litologia_1.empty or litologia_2.empty:
        continue
    tree_lito_2 = cKDTree(litologia_2[['x', 'y', 'z']])
    distancias_minimas_1, _ = tree_lito_2.query(litologia_1[['x', 'y', 'z']])
    leyes_correspondientes_1 = litologia_1['cu'].values
    resultados_1 = pd.DataFrame({
        'distancia': distancias_minimas_1,
        'cu': leyes_correspondientes_1
    })
    resultados_1['intervalo'] = pd.cut(resultados_1['distancia'], bins=np.arange(0, 110, 10), right=False)
    ley_media_por_intervalo_1 = resultados_1.groupby('intervalo')['cu'].mean()
    tree_lito_1 = cKDTree(litologia_1[['x', 'y', 'z']])
    distancias_minimas_2, _ = tree_lito_1.query(litologia_2[['x', 'y', 'z']])
    leyes_correspondientes_2 = litologia_2['cu'].values
    resultados_2 = pd.DataFrame({
        'distancia': distancias_minimas_2,
        'cu': leyes_correspondientes_2
    })
    resultados_2['intervalo'] = pd.cut(resultados_2['distancia'], bins=np.arange(0, 110, 10), right=False)
    ley_media_por_intervalo_2 = resultados_2.groupby('intervalo')['cu'].mean()
    if ley_media_por_intervalo_1.dropna().empty or ley_media_por_intervalo_2.dropna().empty:
        print(f"Combinación Lito {lito_1} vs Lito {lito_2} no tiene suficientes datos en ambas direcciones.")
        continue
    plt.figure(figsize=(6, 4))
    plt.plot(ley_media_por_intervalo_1.index.categories.mid, ley_media_por_intervalo_1.values, marker='o', label=f'Lito {lito_1} respecto a Lito {lito_2}')
    plt.plot(-ley_media_por_intervalo_2.index.categories.mid, ley_media_por_intervalo_2.values, marker='x', label=f'Lito {lito_2} respecto a Lito {lito_1}')
    plt.xlabel('Intervalos de Distancia (m)')
    plt.ylabel('Ley Media de Cu (%)')
    plt.title(f'Distancia al contacto (Lito {lito_1} vs Lito {lito_2})')
    plt.axvline(0, color='black', linewidth=0.5)
    plt.ylim(0, max(ley_media_por_intervalo_1.max(), ley_media_por_intervalo_2.max()) * 1.1)  
    plt.grid(False)
    plt.legend()
    plt.show()
septiembre 9, 2024
top
Nube Minera © 2024