Троичные участки как участок

Я хочу нарисовать несколько тройных графиков и подумал сделать это, используя подспот Matplotlib. Я просто получаю пустые "обычные" графики, а не троичные графики, которые мне нужны. Я нашел использование

figure, ax = plt.subplots()
tax = ternary.TernaryAxesSubplot(ax=ax)

так что это кажется возможным, но не могу выяснить, как заставить это работать. Есть идеи?

Код, который я использую: я использую цикл for, поскольку в данных есть столбцы с именами tria1-a, tria2-a и т. Д. Для различных триад

import ternary
import matplotlib.pyplot as plt
import pandas as pd

#configure file to import. 
filename = 'somecsv.csv'
filelocation = 'location'
dfTriad = pd.read_csv(filelocation+filename)


# plot the data
scale = 33
figure, ax = plt.subplots()
tax = ternary.TernaryAxesSubplot(ax=ax, scale=scale)

figure.set_size_inches(10, 10)
tax.set_title("Scatter Plot", fontsize=20)
tax.boundary(linewidth=2.0)
tax.gridlines(multiple=1, color="blue")

tax.legend()
tax.ticks(axis='lbr', linewidth=1, multiple=5)
tax.clear_matplotlib_ticks()

#extract the xyz columns for the triads from the full dataset
for i in range(1,6) :
    key_x = 'tria'+ str(i) + '-a'
    key_y = 'tria' + str(i) + '-b'
    key_z = 'tria' + str(i) + '-c'

    #construct dataframe from the extracted xyz columns
    dfTriad_data = pd.DataFrame(dfTriad[key_x], columns=['X'])
    dfTriad_data['Y'] = dfTriad[key_y]
    dfTriad_data['Z'] = dfTriad[key_z]

    #create list of tuples from the constructed dataframe
    triad_data = [tuple(x) for x in dfTriad_data.to_records(index=False)]

    plt.subplot(2, 3, i)
    tax.scatter(triad_data, marker='D', color='green', label="")

tax.show()

0 ответов

У меня была та же проблема, и я мог решить ее, сначала "войдя" в подзаговор, а затем создав там троичную фигуру, указав plt.gca() в качестве аргумента ключевого слова ax:

plt.subplot(2,2,4, frameon = False)
scale = 10
plt.gca().get_xaxis().set_visible(False)
plt.gca().get_yaxis().set_visible(False)
figure, tax = ternary.figure(ax = plt.gca(), scale = scale)
#now you can use ternary normally:
tax.line(scale * np.array((0.5,0.5,0.0)), scale*np.array((0.0, 0.5, 0.5)))
tax.boundary(linewidth=1.0)
#...
Другие вопросы по тегам